我正在尝试匹配银行帐号。
它可以采用以下格式:
##########
或######-##########
######-
)(如果存在)可以包含1-6个数字,后跟-
,所有这些数字都不能为零。它可以匹配123456-
但不能000000-
##########
)可以有2-10个数字,必须有一个没有零字符我从这个正则表达式(\d{1,6}\-)?\d{2,10}
开始。它应匹配1.和2.行,而不是3.和4.此正则表达式匹配1. 2.和4.如何排除4.,意味着阻止匹配000000
?
答案 0 :(得分:3)
你可以使用带有负前瞻的正则表达式,以确保开头的全零的代码不匹配:
^(?:(?!0+-)\d{1,6}-)?(?=\d*[1-9])\d{2,10}$
请参阅regex demo
在这里,
^
- 匹配字符串的开头(?:(?!0+-)\d{1,6}-)?
- 匹配可选(一次或零次,由于(?:...)?
构造)1到6位数(带\d{1,6}
)后跟一个连字符仅如果-
以外的数字不是零(由于否定前瞻(?!0+-)
)(?=\d*[1-9])
- 第二组2到10位数字应至少有1个非零数字\d{2,10}
- 匹配2到10的任何数字,后跟...... $
- 字符串基本上,你只需要在你的正则表达式中添加两件事:
^
和$
)答案 1 :(得分:1)
Wikitof Stribizew的回答是"""好的。
但如果你想避免头痛,你可以只使用它:
^(?:[1-9](?:\d{1,5})?-)?\d{2,10}$
这里我们只是禁止初始" 0"在第一组中,然后只允许其他5位数。