Javascript 在正则表达式中匹配特殊字符和字母

Javascript 在正则表达式中匹配特殊字符和字母,javascript,regex,special-characters,Javascript,Regex,Special Characters,我正在尝试验证一个字符串,该字符串应仅包含字母、数字和特殊字符。为此,我尝试使用正则表达式 var pattern = /[a-zA-Z0-9&_\.-]/ var qry = 'abc&*'; if(qry.match(pattern)) { alert('valid'); } else{ alert('invalid'); } 使用上述代码时,字符串abc&*有效。但我的要求是证明这是无效的。即每当出现字母、数字或特殊字符以外的字符时,&-.,字符串的计算结

我正在尝试验证一个字符串,该字符串应仅包含字母、数字和特殊字符。为此,我尝试使用正则表达式

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

使用上述代码时,字符串
abc&*
有效。但我的要求是证明这是无效的。即每当出现字母、数字或特殊字符以外的字符时,
&-.
,字符串的计算结果应为无效。我怎么能用正则表达式做到这一点

那么,为什么不将它们添加到现有的角色类中呢

var pattern = /[a-zA-Z0-9&._-]/
如果需要检查字符串是否只包含那些字符,则还必须锚定表达式:

var pattern = /^[a-zA-Z0-9&._-]+$/
添加的
^
$
分别匹配字符串的开头和结尾

可以使用缩短表达式的
\w
来测试字母、数字或下划线:

var pattern = /^[\w&.-]+$/
正如Nathan在评论中提到的,如果您没有使用
.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
}

将它们添加到允许的字符中,但需要转义其中一些字符,例如-]/\

var pattern = /^[a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/
[\w]与[a-zA-Z0-9]相同

虽然破折号在列表的开头或结尾时不需要转义,但我更喜欢在添加其他字符时转义。此外,+表示您至少需要一个列出的字符。如果零是正常值(即空值),则用*代替:

/^[\w&.\-]*$/
试试这个正则表达式:

/^[\w&.-]+$/
您还可以使用
测试

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

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

   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_ .]*)*$

我试了很多,但是没有一个能在我所有的测试中都起作用。所以我发现:

^(?=.*\d)(?=.[a-z])(?=.[a-z])(?=.[^a-zA-Z0-9])(?!.\s)。{8,15}$

从这个来源:

+1。可能值得一提的是使用
test
而不是
match
,因为您并不真正需要找到匹配项。这有助于提高性能和可读性,并有助于询问者学习新知识。此外,在
i
后面不要加斜杠
/[a-z]/i/
应该是
/[a-z]/i
。关键是在开头使用
^
,在结尾使用
+$
,如下所述<代码>/^[a-zA-Z0-9&\.-]+$/
。我要指出这一点,以防你忽略了这个细微的差别。我建议任何允许所有这些特殊字符的列表也应该允许空格。加号(+)字符不适用于此expression@calbertts,您的意思是它在“变量模式…”中的字符列表中的位置吗?你用哪种语言?Javascript?@highlyunregular我试图用Javascript匹配带加号(+)的字符串,但我发现这并不容易,事实上,我只是放弃了这一点,并进行了单独的验证。@calbertts,当+字符不在方括号中时,需要对其进行转义或将其视为通配符。作为通配符,它意味着:匹配前一个字符/字符组中的1个或多个字符(取决于它们是否用圆括号或方括号括起来)。例如,在模式/^[\w&.\-]+$/中,+字符被用作通配符。能否请您a)将代码格式化为代码,b)添加一些解释?
   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_ .]*)*$
let pattern = /^(?=.*[0-9])(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9!@#$%^&*]{6,16}$/;

//following will give you the result as true(if the password contains Capital, small letter, number and special character) or false based on the string format

let reee =pattern .test("helLo123@");   //true as it contains all the above