5

大家好,我一直在尝试在我的.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

4

3 回答 3

7

根据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。

您可以轻松(也许不是很容易)使用此正则表达式中您需要的部分。

于 2010-12-07T21:02:52.027 回答
4
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

于 2010-12-07T21:04:15.087 回答
2

另请参阅xFront 上的ISBN :

我们为 ISBN 创建了 XML Schema simpleType 定义。此 ISBN 定义涵盖了全球所有 ISBN 的合法格式。

于 2010-12-10T13:50:35.427 回答