2

我试图让一个正则表达式在没有运气的情况下工作。我已经能够将表达式限制为具有 10 位数字的字母数字:

(^[a-zA-Z0-9]{10}+$)

但是我也试图让它允许 $ 字符在任何位置只有 1 个匹配项。

对于类似的东西,它应该是正确的,pQp3b8ar$8或者k7DdRoB$5W

4

2 回答 2

4

三个一般注意事项:

^[a-zA-Z0-9$]{10}$
  • 括号不是必需的
  • {10}+没有多大意义,去掉加号(在固定计数上不需要所有格量词)
  • 如果您想允许使用美元符号,只需将其添加到字符类

要只允许一个美元符号,您可以使用上述的扩展版本:

^(?=[^$]*\$[^$]*$)[a-zA-Z0-9$]{10}$

(?=[^$]*\$[^$]*$)是一个前瞻,读取

(?=        # start look-ahead
  [^$]*    #   any number of non-dollar signs
  \$       #   a dollar sign
  [^$]*    #   any number of non-dollar signs
  $        #   the end of the string
)          # end of look-ahead

它允许字符串上的任何字符,但美元只允许一次。


另一种变体是使用两个前瞻,如下所示:

^(?=[^$]*\$[^$]*$)(?=[a-zA-Z0-9$]{10}$).*

在这里,您可以使用.*匹配字符串的其余部分,因为这两个条件由前瞻检查。例如,这种方法对于密码复杂性检查很有用。

于 2012-11-18T06:11:42.837 回答
0

您可以尝试匹配包含任意数量的字母数字字符的两个字符串的字符串,其中 a$位于中间。

(^[a-zA-Z0-9]+\$[a-zA-Z0-9]+$)

您始终可以在正则表达式之后检查十的长度。

于 2012-11-18T06:15:25.463 回答