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