如何检查数字的整个现有正则表达式?

时间:2015-12-17 09:07:09

标签: regex

我写了一个正则表达式如下:

"^[\+]{0,1}([\#]|[\*]|[\d]){1,15}$"

总之,这与可选的“+”符号匹配,后跟最多15个字符,可能是“#”,“*”或数字。

然而,这意味着'+#'将匹配,这不是一个有效的结果,因为我总是需要至少一个数字。

典型的有效匹配可能是:

+1234
445678999
+#7897897
+345764756#775

所以,鉴于我已经为这些匹配制作了一个有效的RegEx,我想优雅的解决方案是使用这个正则表达式并添加一些特殊标准来全局检查结果中的数字或以某种方式禁止任何不能t中至少有一位数。

如何查看该数字?

4 个答案:

答案 0 :(得分:5)

试试这个正则表达式(我最初的想法):

^(?=.*[0-9])[+]?([#*\d]{1,15})$

Regular expression visualization

您可以将[0-9]替换为\d

<强>样本:

https://regex101.com/r/bM9oE6/3

答案 1 :(得分:5)

此解决方案需要字符串中的至少一个数字,使用前瞻((?=...)部分):

^(?=.*\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)

Online Demo

正则表达式图形架构(每个人都喜欢它)

Regular expression visualization

注意:正如您在演示中所看到的那样,避免使用+*+#*之类的组合,您可以获得它......

答案 2 :(得分:2)

我用

^(?=.*\d)\+?[#*\d]{1,15}$

<强>解释

^               : begining of line
  (?=           : lookahead
    .*\d        : at least one digit
  )
  \+?           : optional +
  [#*\d]{1,15}  : 1 to 15 character in class [#*\d]
$               : end of line

<强>匹配

+1234
445678999
+#7897897
+345764756#775
###456

不匹配:

+#*
+*
#*
+#

答案 3 :(得分:-2)

这适用于您的情况:

^(\+{0,1}[\d#]{1,15})$

演示: https://regex101.com/r/fU1eC2/1

修改

如果你需要#after + in string ^[+#]?([\d#]{1,15})(?<!#)$ 匹配&#34; + #7897897&#34;

如果不是,请使用^[+#]*([\d#]{1,15})(?<!#)$ 匹配&#34; +#7897897&#34;