2016-12-21 11 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-5661, 1-56619-90, 1257561035

그것은해야는 아래의 결과를 반환합니다.

+0

_it does not work_는 (는) 적절한 문제 설명이 아닙니다. –

+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 형식을 확인하는 것이 좋습니다. –