ISBN-10
^
(?:ISBN(?:-10)?:?\ )? # Optional ISBN/ISBN-10 identifier.
(?= # Basic format pre-checks (lookahead):
[0-9X]{10}$ # Require 10 digits/Xs (no separators).
| # Or:
(?=(?:[0-9]+[-\ ]){3}) # Require 3 separators
[-\ 0-9X]{13}$ # out of 13 characters total.
) # End format pre-checks.
[0-9]{1,5}[-\ ]? # 1-5 digit group identifier.
[0-9]+[-\ ]?[0-9]+[-\ ]? # Publisher and title identifiers.
[0-9X] # Check digit.
$
eg.
0-596-52068-7
ISBN-10 0-596-52068-7
^
(?:ISBN(?:-13)?:?\ )? # Optional ISBN/ISBN-13 identifier.
(?= # Basic format pre-checks (lookahead):
[0-9]{13}$ # Require 4 separators
| # Or:
(?=(?:[0-9]+[-\ ]){4}) # Require 4 separators
[-\ 0-9]{17}$ # out of 17 characters total.
) # End format pre-checks.
97[89][-\ ]? # ISBN-13 prefix.
[0-9]{1,5}[-\ ]? # 1-5 digit group identifier.
[0-9]+[-\ ]?[0-9]+[-\ ]? # Publisher and title identifier.
[0-9] # check digit.
$
ISBN-10 or ISBN-13
# ISBN-10 or ISBN-13
^
(?:ISBN(-1(?:(0)|3))?:?\ )?
(?(1)
(?(2)
# ISBN-10
(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$)
[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]
|
# ISBN-13
(?=[0-9]{13}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)
97[89][- ]?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9]
)
|
# No explicit idntifier; allow ISBN-10 or ISBN-13
(?=[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]
)
$