Java Regex для проверки ISBN

В этом руководстве по регулярным выражениям Java мы научимся использовать регулярные выражения для проверки того, ввел ли пользователь допустимый международный стандартный номер книги(ISBN).

1. Что такое действительный ISBN?

ISBN — это 13-значный(или 10-значный) номер, который однозначно идентифицирует книги и книжные продукты, изданные на международном уровне. Целью ISBN является установление и идентификация одного названия или издания названия от одного конкретного издателя, и он является уникальным для этого издания, что позволяет более эффективно продавать продукцию книготорговцам, библиотекам, университетам, оптовикам и дистрибьюторам.

Каждый ISBN состоит из тринадцати цифр(или 10 цифр), и всякий раз, когда он печатается, ему предшествуют буквы ISBN. Номер делится на четыре части переменной длины, каждая часть отделена дефисом.

Четыре части ISBN следующие:

  • Идентификатор группы или страны, который определяет национальную или географическую группу издателей;
  • Идентификатор издателя, который идентифицирует конкретного издателя в группе;
  • Идентификатор заголовка, который идентифицирует конкретный заголовок или издание заголовка;
  • Контрольная цифра — это одна цифра в конце ISBN, которая подтверждает подлинность ISBN.

Первоначальный 9-значный стандартный номер книги(SBN) не имел идентификатора регистрационной группы, но добавление нуля(0) в качестве префикса к 9-значному SBN создает действительный 10-значный ISBN.

Все нижеперечисленное можно считать примерами действительных номеров ISBN:

  • ISBN 978-0-596-52068-7
  • ISBN-13: 978-0-596-52068-7
  • 978 0 596 52068 7
  • 9780596520687
  • ISBN-10 0-596-52068-9
  • 0-596-52068-9

2. Регулярное выражение для проверки ISBN

Для проверки ISBN наше регулярное выражение будет выглядеть так:

Регулярное выражение для ISBN-10

 ^(?:ISBN(?:-10)?:? )?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$)[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$

Регулярное выражение для ISBN-13

^(?:ISBN(?:-13)?:? )?(?=[0-9]{13}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)97[89][- ]?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9]$

Регулярное выражение для ISBN-10 или ISBN-13

^(?:ISBN(?:-1[03])?:? )?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$

Обратите внимание, что мы не можем проверить ISBN, используя только регулярное выражение, поскольку последняя цифра вычисляется с помощью алгоритма контрольной суммы. Регулярные выражения в этом разделе проверяют только формат ISBN.

Теперь давайте проверим наше регулярное выражение ISBN, используя несколько демонстрационных номеров ISBN.

3. Пример Java для проверки только форматов ISBN-10

List<String> isbns = new ArrayList<String>();//Valid ISBNsisbns.add("0-596-52068-9");isbns.add("0 512 52068 9");isbns.add("ISBN-10 0-596-52068-9");isbns.add("ISBN-10: 0-596-52068-9");//Invalid ISBNsisbns.add("0-5961-52068-9");isbns.add("11 5122 52068 9");isbns.add("ISBN-13 0-596-52068-9");isbns.add("ISBN-10- 0-596-52068-9");String regex = "^(?:ISBN(?:-10)?:? )?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$)[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$";Pattern pattern = Pattern.compile(regex);for(String isbn : isbns){Matcher matcher = pattern.matcher(isbn);System.out.println(matcher.matches());}Output:truetruetruetruefalsefalsefalsefalse

4. Программа Java для проверки только форматов ISBN-13

List<String> isbns = new ArrayList<String>();//Valid ISBNsisbns.add("ISBN 978-0-596-52068-7");isbns.add("ISBN-13: 978-0-596-52068-7");isbns.add("978 0 596 52068 7");isbns.add("9780596520687");//Invalid ISBNsisbns.add("ISBN 11978-0-596-52068-7");isbns.add("ISBN-12: 978-0-596-52068-7");isbns.add("978 10 596 52068 7");isbns.add("119780596520687");String regex = "^(?:ISBN(?:-13)?:? )?(?=[0-9]{13}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)97[89][- ]?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9]$";Pattern pattern = Pattern.compile(regex);for(String isbn : isbns){Matcher matcher = pattern.matcher(isbn);System.out.println(matcher.matches());}Output:truetruetruetruefalsefalsefalsefalse

5. Проверьте форматы ISBN-10 и ISBN-13

List<String> isbns = new ArrayList<String>();//Valid ISBNsisbns.add("ISBN 978-0-596-52068-7");isbns.add("ISBN-13: 978-0-596-52068-7");isbns.add("978 0 596 52068 7");isbns.add("9780596520687");isbns.add("0-596-52068-9");isbns.add("0 512 52068 9");isbns.add("ISBN-10 0-596-52068-9");isbns.add("ISBN-10: 0-596-52068-9");//Invalid ISBNsisbns.add("ISBN 11978-0-596-52068-7");isbns.add("ISBN-12: 978-0-596-52068-7");isbns.add("978 10 596 52068 7");isbns.add("119780596520687");isbns.add("0-5961-52068-9");isbns.add("11 5122 52068 9");isbns.add("ISBN-11 0-596-52068-9");isbns.add("ISBN-10- 0-596-52068-9");String regex = "^(?:ISBN(?:-1[03])?:? )?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$";Pattern pattern = Pattern.compile(regex);for(String isbn : isbns){Matcher matcher = pattern.matcher(isbn);System.out.println(matcher.matches());}Output:truetruetruetruetruetruetruetruefalsefalsefalsefalsefalsefalsefalsefalse

Я посоветую вам поэкспериментировать с приведенным выше простым регулярным выражением, чтобы попробовать больше вариантов ISBN, и сообщите мне о ваших результатах.

Ссылки:

http://en.wikipedia.org/wiki/Международный_Стандартный_Номер_Книги
http://www.isbn.org/faqs_general_questions

Прокрутить вверх