2016-12-21 6 views
0

ユーザが入力したISBN番号を確認するには正規表現が必要です。正規表現を使用してISBN番号を確認する

ISBNは、文字列でなければならないだけ含まれています [10 or 13 digits] and hyphens

私は^[\d*\-]{10}|[\d*\-]{13}$を試みたが、それは動作しません。

私の正規表現は一致します。私は本当にすべての助けに感謝

"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 

978-1-56611-56619-901257561035

それがすべきは、以下の結果を返します。

+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:どうもありがとうございました。完璧に動作します。答えは5分後にSolvedとマークされます。 –

+1

@GentlemanMaxええ、そうです。これは、有効なISBNを確認するためには使用できません。しかし、有効なISBN形式をチェックすると便利です。 –

関連する問題