Regular expression for an ISBN 13

user534202 picture user534202 · Dec 7, 2010 · Viewed 7.9k times · Source

Hi all I'm trying all the time to make a regular expression for XML in my .xsd.

This expression should verify an ISBN-13 number but I couldn't get further than this:

ISBN (978|979)[ |-][0-9]{1,5}[ |-][0-9]{1,7}[ |-][0-9]{1,7}[0-9]{1}

This is ok if somebody fills in a correct ISBN13, but it is also still possible to make ISBNs which are much longer (for example it is still possible to make the first block of numbers 5 long and the second 7 digits and the third also 7 digits long).

I am very new to this topic and I cannot solve this problem, therefore I hope somebody could help me or solve my problem.

I know what an ISBN 13 consists of, I checked wikipedia and other websites, but my actual problem is the regular expression it self.

I hope that this wasnt asked earlier, so I am sorry if somebody asked this question earlier. jajay07

Answer

terminus picture terminus · Dec 7, 2010

According to http://regexlib.com/REDetails.aspx?regexp_id=1747 the regular expression

ISBN(-1(?:(0)|3))?:?\x20+(?(1)(?(2)(?:(?=.{13}$)\d{1,5}([ -])\d{1,7}\3\d{1,6}\3(?:\d|x)$)|(?:(?=.{17}$)97(?:8|9)([ -])\d{1,5}\4\d{1,7}\4\d{1,6}\4\d$))|(?(.{13}$)(?:\d{1,5}([ -])\d{1,7}\5\d{1,6}\5(?:\d|x)$)|(?:(?=.{17}$)97(?:8|9)([ -])\d{1,5}\6\d{1,7}\6\d{1,6}\6\d$)))

matches both the old 10 digit ISBNs and the new 13 digit ISBNs.

You can easily (maybe not very easily) use the part of this regexp that you need.