Python 正则表达式验证ISBN

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

^
(?: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]
  )
$  



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值