2012-11-18 71 views
2

我试图得到一个正则表达式,没有运气的工作。我已经能够在表达限制的字母数字编号有10位:找不到具体的RegEx

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

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

对于像pQp3b8ar$8k7DdRoB$5W这样的东西,它应该是真实的。

+0

我不确定它是否可以使用正则表达式而不耗尽所有10个位置的$符号... – luiges90

回答

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 

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


另一个变化是使用两个查找aheads,像这样:

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

在这里,您可以使用.*匹配字符串的其余部分,因为这两个条件是通过外观检查-aheads。例如,这种方法对password complexity checks很有用。

+0

即将结束,但您将只接受1 $允许吗?如果我放入qFYg64E $ h $,我希望它与qFYg64Ehh $的true相比为false。 –

+0

啊!查看修改后的答案 – Tomalak

+1

不错,也很感谢你的解释,让你更容易知道发生了什么。 –

0

您可以尝试将包含任意数量字母数字字符的两个字符串的字符串与中间的$匹配。

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

您可以随时检查正则表达式后的十个长度。