我写了一个正则表达式如下:
"^[\+]{0,1}([\#]|[\*]|[\d]){1,15}$"
总之,这与可选的"+"符号匹配,后跟最多15个字符,可能是"#","*"或数字.
但是,这意味着'+#'将匹配,这不是一个有效的结果,因为我总是需要至少一个数字.
典型的有效匹配可能是:
+1234
445678999
+#7897897
+345764756#775
所以,鉴于我已经为这些匹配制作了一个有效的RegEx,我想优雅的解决方案是使用这个正则表达式并添加一些特殊标准来全局检查结果中的数字或以某种方式禁止任何没有的数据最少一位数.
我如何检查该数字?
试试这个正则表达式(我最初的想法):
^(?=.*[0-9])[+]?([#*\d]{1,15})$
您可以替换[0-9]
使用\d
.
DEMO:
https://regex101.com/r/bM9oE6/3
此解决方案需要字符串中的至少一个数字,使用前瞻(该(?=...)
部分):
^(?=.*\d)\+?[#*\d]{1,15}$
通古斯
^ # Start of the string (or line with m/multiline flag) (?=.*\d) # Lookahead that checks for at least one digit in the match \+? # An optional literal plus '+' [#*\d]{1,15} # one to fifteen of literal '#' or '*' or digit (\d is [0-9]) $ # End of the string (line with m/multiline flag)
在线演示
正则表达式图形模式(每个人都喜欢它)
注意:正如你在演示中看到的那样避免组合就像+*
或+
或者#*
,你得到它......