2016-12-21 3 views
0

Мне нужно регулярное выражение, чтобы проверить номер ISBN, введенный пользователем.Используйте регулярное выражение для проверки номера ISBN

ISBN должна быть строка содержит только: [10 or 13 digits] and hyphens

Я попытался ^[\d*\-]{10}|[\d*\-]{13}$, но он не работает.

Моя регулярное выражение соответствует только: 978-1-5661, 1-56619-90, 1257561035

Он должен возвращает результаты ниже:

"978-1-56619-909-4 2" => false 
"978-1-56619-909-4" => true 
"1-56619-909-3 " => false 
"1-56619-909-3" => true 
"isbn446877428ydh" => false 
"55 65465 4513574" => false 
"1257561035" => true 
"1248752418865" => true 

Я очень признателен за любую помощь.

+0

_it не работает_ не является надлежащим описанием проблемы. –

+3

как было ** [здесь] (http://stackoverflow.com/questions/4381514/regular-expression-for-an-isbn-13) **? – YvesLeBorg

+2

Вы не можете проверить ISBN с регулярным выражением. Последняя цифра - [контрольная сумма] (https://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digits) и должна быть вычислена. – GentlemanMax

ответ

3

Вы можете использовать это регулярное выражение с положительным опережающим просмотром:

^(?=(?:\D*\d){10}(?:(?:\D*\d){3})?$)[\d-]+$ 

RegEx Demo

(?=(?:\D*\d){10}(?:(?:\D*\d){3})?$) является положительным опережением, что гарантирует, что мы имеем 10 или 13 разрядов на входе.

+2

Люди должны быть осторожны с этим решением. Он соответствует 10 или 13-значным номерам, но не все 10 и 13-значные номера являются ISBN. Например. '978-0-306-40615-6' составляет 13 цифр, но не является допустимым ISBN – GentlemanMax

+1

@anubhava: Большое спасибо. Работает отлично. Ответ будет отмечен Solved через 5 минут. –

+1

@ GentlemanMax Да, вы правы. Это невозможно использовать для проверки действительного ISBN. Но полезно проверить действительный формат ISBN. –