2012-12-19 208 views
26

我想验证一个字符串,它只能包含字母数字和特殊字符&-._。为此,我尝试了一个正则表达式。在正则表达式中匹配特殊字符和字母

var pattern = /[a-zA-Z0-9&_\.-]/ 
var qry = 'abc&*'; 
if(qry.match(pattern)) { 
    alert('valid'); 
} 
else{ 
    alert('invalid'); 
} 

当使用上面的代码,字符串abc&*是有效的。但我的要求是显示这个无效。即当字母以外的字符,数字或特殊字符&-._出现时,字符串应评估为无效。我如何用正则表达式来做到这一点?

+4

的关键是使用'^'开头和'+ $'末,作为答案下面已经解释。 '/^[A-ZA-Z0-9&_ \ .-] + $ /'。如果你错过了这个细微差别,我会指出这一点。 –

回答

42

将它们添加到允许的字符,但你需要逃避他们中的一些,比如 - ]/\

var pattern = /^[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/ 

这样,你可以删除你希望禁止任何个性。

此外,要包括起始和串地点标记的结束^和$

更新:

由于elclanrs了解(和我们其他人都没有,开始)时,特殊字符需要在图案被允许是& -._

/^[\w&.\-]+$/ 

[\ W]是与[A-ZA-Z0-9_]

虽然破折号在列表的开始或结束时并不需要转义,但如果添加其他字符,我更喜欢这样做。此外,+表示您至少需要列出的一个字符。如果零是确定的(即空值),然后用*代替替换:

/^[\w&.\-]*$/ 
+1

我建议任何允许所有这些特殊字符的列表都应该允许空格。 – Abacus

+0

加号(+)字符不适用于这个表达式 – calbertts

+0

@calbertts,你的意思是它包含在“var pattern ...”中的字符列表中吗?你使用哪种语言? JavaScript的? –

16

那么,为什么不把它们添加到你现有的角色类?

var pattern = /[a-zA-Z0-9&._-]/ 

如果你需要检查字符串是否包含什么,但你有这些字符的表达以及:

var pattern = /^[a-zA-Z0-9&._-]+$/ 

增加的^$比赛的开始和结束字符串分别。

测试字母,数字或下划线可以\w做既缩短你的表达:

var pattern = /^[\w&.-]+$/ 

以上,在弥敦道的评论中提到,如果你不使用从.match()结果(它返回一个什么已经匹配阵列),最好使用RegExp.test()它返回一个简单的布尔:

if (pattern.test(qry)) { 
    // qry is non-empty and only contains letters, numbers or special characters. 
} 

更新2

如果我误解了问题,下面将检查是否满足所有三个单独的条件。

if (/[a-zA-Z]/.test(qry) && /[0-9]/.test(qry) && /[&._-]/.test(qry)) { 
    // qry contains at least one letter, one number and one special character 
} 
+3

+1。可能值得一提的是使用'test'而不是'match',因为你并不需要找到匹配。这可能有助于提高性能和可读性,并可能有助于提问者学习新东西。 –

+1

另外,'i'后面没有斜线。 '/ [a-z]/i /'应该是'/ [a-z]/i'。 –

9

试试这个正则表达式:

/^[\w&.-]+$/ 

您也可以使用test

if (pattern.test(qry)) { 
    // valid 
} 
0

试试这个正则表达式:匹配我们在段落使用特殊charecters和字母

Javascript : /^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$/.test(str) 

       .test(str) returns boolean value if matched true and not matched false 

      c# : ^[a-zA-Z]+(([\'\,\.\-_ \/)(:][a-zA-Z_ ])?[a-zA-Z_ .]*)*$ 
相关问题