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

时间:2012-12-19 06:23:38

标签: javascript regex special-characters

我正在尝试验证字符串,该字符串应仅包含字母数字和特殊字符&-._。为此我尝试了正则表达式。

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

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

6 个答案:

答案 0 :(得分:47)

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

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

这样你就可以删除任何你想要禁止的角色。

此外,您希望包含字符串placemarkers的开头和结尾^和$

<强>更新

正如elclanrs所理解的那样(我们其他人最初没有理解),模式中需要允许的特殊字符是&amp; -._

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

[\ w]与[a-zA-Z0-9 _]

相同

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

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

答案 1 :(得分:16)

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

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
}

答案 2 :(得分:10)

试试这个正则表达式:

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

您也可以使用test

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我尝试了很多,但是没有一个可以用于所有测试。所以我发现了这个:

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

来自此来源:https://www.w3resource.com/javascript/form/password-validation.php