【问题标题】:Regular expression for an ISBN 13ISBN 13 的正则表达式
【发布时间】:2010-12-07 20:59:31
【问题描述】:

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

【问题讨论】:

    标签: xml regex xsd isbn


    【解决方案1】:

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

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

    【讨论】:

    • 我也在同一页面找到了这个解决方案,不幸的是它不适用于我的 xml 和我的 xsd
    • 您对此解决方案的具体问题是什么?
    • 也许这是我非常有限的正则表达式技能,但我无法理解这是如何建立的,或者我如何从我的方法中到达那里,我也想了解它的作用,而不仅仅是复制粘贴..除此之外我不能有ISBN10。该字段只能包含 ISBN13
    • 如果您不想要 10 位版本,那么 dmnkhhn 有更好的答案。
    【解决方案2】:
    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
    国际标准书号:978-1-4028-9462-6
    ISBN-13 978-1-4028-9462-6
    国际标准书号 978-1-4028-9462-6

    【讨论】:

    • 我只是想试试这个,但是在ISBN出错后xsd没有验证。也许我太傻了,但这整天都在开车,谁能解释一下这部分“发生”了什么 \x20*(?=.{17}$)97(?:8|9)
    • 如果我需要表达式来匹配不包含标题“ISBN”部分的模式怎么办?
    • 只需删除ISBN(?:-13)?:?\x20* 部分
    【解决方案3】:

    另请参阅 xFront 上的 ISBN

    我们已经创建了一个 XML Schema ISBN 的 simpleType 定义。这 ISBN 定义涵盖所有法律 全球 ISBN 格式。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多