我试图让正则表达式没有运气。我已经能够将表达式限制为10位数的字母数字:
(^[a-zA-Z0-9]{10}+$)
但是我也试图让它允许任何位置只有1场比赛的$字符。
对于类似pQp3b8ar$8
或k7DdRoB$5W
的内容,它应该是真的。
答案 0 :(得分:4)
三个一般性说明:
^[a-zA-Z0-9$]{10}$
{10}+
没有多大意义,放弃加号(在固定数量上不需要possessive quantifier)要仅允许美元符号一次,您可以使用上述的扩展版本:
^(?=[^$]*\$[^$]*$)[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}$).*
在这里,您可以使用.*
来匹配字符串的其余部分,因为前瞻检查了两个条件。例如,此方法对password complexity checks非常有用。
答案 1 :(得分:0)
您可以尝试匹配包含两个字符串的字符串,其中包含任意数量的字母数字字符和$
。
(^[a-zA-Z0-9]+\$[a-zA-Z0-9]+$)
你可以随时检查正则表达式之后的十个长度。