2012-11-18 21 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]+$) 

您可以隨時檢查正則表達式後的十個長度。