2012-01-18 67 views
1

我有以下要求:在正則表達式中使特殊字符可選

密碼必須是6-18個字符並且至少包含一個字母和一個數字。特殊字符如@,%,&,#是允許的。

我創造了這個:

​​

,但它接受其它特殊字符,例如_以及和它需要的這些特殊字符@%#&一個必須是字符串。我想讓這個可選。意思是如果用戶輸入這些特殊字符之一,那麼字符串應該是有效的,但如果用戶沒有輸入這些字符,那麼它不應該是無效的。如果用戶輸入任何其他特殊字符,字符串應該是無效的。

+0

你爲什麼標籤這個'nsregularexpression'?這是關於ASP.NET或Objective-C的問題嗎? – 2012-01-18 12:53:18

回答

0

對於長度,只需使用字符串長度函數。

然後簡單地測試一下你的輸入是否符合[0-9], [A-Za-z] and^[0-9A-Za-z @%&#] + $`。

+0

我想允許@%&#這些字符(儘管可選) – 2012-01-18 12:15:41

+0

嗯,這將允許他們 - 它只測試至少有一個字母和一個數字,就是這樣。正則表達式不會被錨定! – fge 2012-01-18 12:16:31

+0

fge我想只允許這些特殊字符,所有其他特殊字符/字符應該被禁止。 – 2012-01-18 12:18:25

2

'。'允許換行符(\ n)旁邊的任何字符,所以如果你忽略你的正則表達式的最後一節就應該做你需要的東西:

^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z]).*$ 

如果你想要一些字符不被允許,如「_」你可以把他們放在一個負面看,例如

^.*(?=.{6,18})(?=.*\d)(?=.*[A-Za-z])(?!.*[_]).*$ 

字符串中不允許使用'_'和'*'。

+0

這一個工作。最後一件事。我們可以以某種方式禁止除這4個以外的所有特殊字符嗎? – 2012-01-18 12:28:41

+0

試試這個'^ [0-9a-zA-Z @#%&] *(?=。{6,18})(?= [0-9a-zA-Z @#%&] * \ d) (?= [0-9a-zA-Z @#%&] * [A-Za-z])[0-9a-zA-Z @#%&] * $'它有相同的想法@ABCade了。 – apines 2012-01-18 12:37:41

+0

@ user1125955:爲什麼你不允許密碼中的任何字符? – 2012-01-18 12:44:37

0

而不是使用「。」這使得幾乎所有的東西,使用類似:

[[email protected]#%&] 
5

至於其他的反應說,這是一個的匹配那些不需要的字符的.*。第一個.*根本不應該在那裏,第二個應該被替換爲一個字符類。

或者甚至更好,在第一個預見結束時添加$;現在它驗證長度和組成。末尾的.*和位於視向內的兩個都可以,因爲構圖已經過驗證。

^(?=[[email protected]%&#]{6,18}$)(?=.*\d)(?=.*[A-Za-z]).*$ 

or, more readably: 

^        # start of string 
(?=[[email protected]%&#]{6,18})$ # length and composition 
(?=.*\d)      # required digit 
(?=.*[A-Za-z])    # required letter 
.*       # go ahead and consume it 
$        # end of string