48

我正在尝试验证一个字符串,它应该&-._只包含字母数字和特殊字符。为此,我尝试使用正则表达式。

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

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

4

6 回答 6

72

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

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

这样,您可以删除您想要禁止的任何单个字符。

此外,您希望包含字符串地标 ^ 和 $ 的开始和结束

更新:

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

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

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

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

/^[\w&.\-]*$/
于 2012-12-19T06:27:08.573 回答
17

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

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
}
于 2012-12-19T06:25:45.073 回答
13

Try this regex:

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

Also you can use test.

if ( pattern.test( qry ) ) {
  // valid
}
于 2012-12-19T06:33:40.327 回答
1

我尝试了其中的一堆,但没有一个适用于我的所有测试。所以我发现了这个:

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

从这个来源:https ://www.w3resource.com/javascript/form/password-validation.php

于 2020-10-04T09:48:39.377 回答
1
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
于 2019-01-16T11:05:41.050 回答
0

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

   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_ .]*)*$
于 2017-02-08T04:11:22.833 回答