大家好我一直在尝试在我的 .xsd 中为XML制作正则表达式。
这个表达式应该验证一个ISBN-13号码,但我得不到更多:
ISBN (978|979)[ |-][0-9]{1,5}[ |-][0-9]{1,7}[ |-][0-9]{1,7}[0-9]{1}
如果有人填写了正确的ISBN13,这是可以的,但它仍然可以使ISBN更长(例如,仍然可以使第一个数字块长5和第二个7位和第三个也是7位数。)
我对这个话题很新,我无法解决这个问题,因此我希望有人可以帮助我或解决我的问题。
我知道ISBN 13是由什么组成的,我检查了维基百科和其他网站,但我的实际问题是它自己的正则表达式。
我希望早些时候没有问过,所以如果有人早点提出这个问题,我很抱歉。 jajay07
答案 0 :(得分:6)
根据http://regexlib.com/REDetails.aspx?regexp_id=1747正则表达式
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$)))
匹配旧的10位数ISBN和新的13位ISBN。
您可以轻松(可能不是很容易)使用此regexp所需的部分。
答案 1 :(得分:3)
ISBN(?:-13)?:?\x20*(?=.{17}$)97(?:8|9)([ -])\d{1,5}\1\d{1,7}\1\d{1,6}\1\d$
应该匹配:
ISBN-13:978-1-4028-9462-6
ISBN:978-1-4028-9462-6
ISBN-13 978-1-4028-9462-6
ISBN 978-1-4028-9462-6
答案 2 :(得分:2)
另请参阅xFront上的ISBN:
我们已经创建了一个XML Schema ISBN的simpleType定义。这个 ISBN定义涵盖了所有法律 世界各地的ISBN格式。