首页 文章

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

提问于
浏览
27

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

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

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

4 回答

  • 16

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

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

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

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

    Update:

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

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

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

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

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

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

    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.
    }
    

    Update 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
    }
    
  • 10

    试试这个正则表达式:

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

    你也可以使用 test .

    if ( pattern.test( qry ) ) {
      // valid
    }
    
  • 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_ .]*)*$
    

相关问题