2012-01-18 72 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