2009-07-21 64 views
2

下面的正則表達式要求密碼有1個數字,1個字符(上限或下限),最小長度爲8。但是如果我輸入一個特殊的字符,它會返回false。我不想要一個特殊的字符,但我想在這種情況下允許它。我怎樣才能改變這個正則表達式來允許一個特殊的字符?允許特殊字符的正則表達式?

Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z])\w{8,}$") 
+0

任何特殊字符?請明確說明。 – mveerman 2009-07-21 14:25:34

回答

6

更改 「\ W」 到 「」應該這樣做:

Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$") 

\ W匹配「字」字,這通常不會匹配特殊字符(取決於您的「特殊」和語言你使用的定義)。
。將匹配除換行符以外的任何字符

4
Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$") 
+0

這允許密碼中的空格。我懷疑這是不希望的。 – hobodave 2009-07-21 14:29:35

+2

爲什麼密碼中的空格比例如&符號更不理想? – chaos 2009-07-21 14:30:23

+0

好點。但是你可能想要修剪/限制前導空白和尾隨空白。 – hobodave 2009-07-21 14:39:05

4

爲什麼不做3次單獨的檢查,這樣您可以清楚地檢查密碼是否符合所需參數,但不必維護大型正則表達式?

if (Regex.IsMatch(Password, "\d") && 
    Regex.IsMatch(Password, "\w") && 
    Password.length >= 8) //psuedo-code 

這不會限制任何字符。它會檢查密碼是否至少有一個單詞字符,至少有一個數字,並且至少有8個字符長。

3

Toran,如果你不希望允許空白密碼中使用以下命令:

Regex.IsMatch(Password, "^(?=.*[0-9])(?=.*[a-zA-Z]\S{8,}$") 
相關問題