2010-01-04 66 views
7

我正在尋找一個相當具體的正則表達式,我幾乎擁有它,但並不完全。正則表達式需要一個數字或一個非字母數字字符的密碼

我想要一個正則表達式,這將需要至少5個charactors,其中這些字符中的至少一個是要麼數值非字母數字字符。

這是我到目前爲止有:

^(?=.*[\d]|[[email protected]#$%\^*()_\-+=\[{\]};:|\./])(?=.*[a-z]).{5,20}$ 

所以問題是「或」部分。它將允許非字母數字值,但仍需要至少一個數字值。你可以看到我有或運算符「|」在我需要的數字和非字母數字之間,但似乎不起作用。

任何建議將是偉大的。

+0

你可以使用\ W(非文字字符,即無[A-ZA-Z0-9_的非字母數字字符])而不是[!@##$%\^*()_ \ - + = \ [{\]};:| \ ./] – 2012-05-10 01:02:21

回答

19

嘗試:

^(?=.*(\d|\W)).{5,20}$ 

的簡短解釋:

^       # match the beginning of the input 
(?=      # start positive look ahead 
    .*      # match any character except line breaks and repeat it zero or more times 
    (      # start capture group 1 
    \d     #  match a digit: [0-9] 
    |      #  OR 
    \W     #  match a non-word character: [^\w] 
)      # end capture group 1 
)       # end positive look ahead 
.{5,20}     # match any character except line breaks and repeat it between 5 and 20 times 
$       # match the end of the input 
+0

不怕...不要求你有一個數字或非字母數字字符 – 2010-01-05 04:06:11

+0

是的。我想你沒有正確測試它?展望未來需要字符串至少包含一個數字或非單詞。 – 2010-01-05 07:51:24

+2

......如果你的意思是*「一個數字**和**非字母數字字符」*,那麼這就可以實現:'^(?=。* \ d)(?=。* \ W) {5,20} $' – 2010-01-05 07:52:53

0

這樣怎麼樣?

^.*?[\[email protected]#$%\^*()_\-+=\[{\]};:|\./].*$ 

對於長度5,20請用正常strlen函數

+0

這實際上並不奏效,就好像您想要一個非字母數字或數字字符在開始或結束時,它將失敗。但是,你確實讓我走上了正軌。 – 2010-01-04 07:56:55

+0

你真的測試過嗎?它應該在開始或結束時用於非字母數字或數字字符。 – YOU 2010-01-04 08:19:18

0

是否真的有必要的東西,在一個巨大的正則表達式的一切嗎?只需使用程序邏輯(5 ≤ length(s) ≤ 20) ∧ (/[[:digit:]]/ ∨ /[^[:alpha:]]/)。我認爲,在語義和語義上更具可讀性。

+0

我在各地使用ASP.NET成員資格,需要返回並在多個位置實現該邏輯以及異常等。在Membership配置中使用Regex更容易。正則表達式就像所有其他編程技術一樣。 – 2010-01-04 07:46:09

1

也許,這可能爲你工作:

^.*[\d\W]+.*$ 

,並使用一些這樣的代碼來檢查字符串大小:

if(str.len >= 5 && str.len =< 20 && regex.ismatch(str, "^.*[\d\W]+.*$")) { ... } 
+0

我需要所有的正則表達式來解決當前的問題。 – 2010-01-04 07:53:57

0

很簡單的解決方案,一旦S.Mark讓我在正確的軌道上,只需將我的數字和非字母數字片段合併爲一個即可。

這裏的任何人最後的正則表達式這就是興趣:

^(?=.*[\[email protected]#$%\^*()_\-+=\[{\]};:|\./])(?=.*[a-z]).{5,20}$ 

這將允許5個到20個字符之間的任何密碼,至少需要一個字母和一個數字和/或一個非字母數字字符。

相關問題