我在试着匹配一个银行帐号。它可以是这样的格式:##########
或######-##########
######-
),如果存在的话,可以有1-6个数字跟在-
后面,它们不能都是零。它可以与123456-
相匹配,但不能000000-
##########
)可以有2-10个数字,必须有一个无零字符。我从这个regex (\d{1,6}\-)?\d{2,10}
开始。它应该匹配1和2行,而不是3和4。这个正则表达式匹配1.2和4。
发布于 2016-02-14 20:48:44
您可以使用带有负前瞻性的正则表达式,以确保开始时带有所有零的代码不匹配:
^(?:(?!0+-)\d{1,6}-)?(?=\d*[1-9])\d{2,10}$
这里,
^
-匹配字符串的开头(?:(?!0+-)\d{1,6}-)?
-可选地(1次或0次,由于(?:...)?
构造)匹配1到6位数字(与\d{1,6}
),后面跟着连字符,只有当到-
的数字不是零时(由于负的前瞻性(?!0+-)
)(?=\d*[1-9])
-第二组2到10位数应该至少有一个非零位数。\d{2,10}
-匹配2到10位数字,后面跟着.$
-字符串的末尾基本上,您只需要在regex中添加两样东西:
^
和$
)发布于 2016-02-14 21:09:00
Wiktof Stribizew的回答是“好的”。
但是,如果你想避免头朝前看的头痛,你只需使用以下几个:
^(?:[1-9](?:\d{1,5})?-)?\d{2,10}$
在这里,我们只是禁止在第一组中的初始"0“,然后只允许直到其他5个数字。
https://stackoverflow.com/questions/35397751
复制相似问题