提问者:小点点

正则表达式仅在JavaScript中存在字母或数值时接受特殊字符?


我有一个这样的Javascript正则表达式:

/^[a-zA-Z0-9 !@#$%^&*()-_-~.+,/\" ]+$/

它允许以下条件:

>

  • 只允许字母

    只允许数字

    允许组合字母和数字

    允许组合字母、数字和特殊字符

    我想修改上面的正则表达式以涵盖另外两种情况,如下所示:

    只允许使用特殊字符

    字符串不应以特殊字符开头

    所以基本上我的要求是:

    string = 'abc' -> Correct
    string = '123' -> Correct
    string = 'abc123' ->Correct
    string = 'abc123!@#' ->Correct
    string = 'abc!@#123' -> Correct
    string = '123!@#abc' -> Correct
    
    string = '!@#' -> Wrong
    string = '!@#abc' -> Wrong
    string = '!@#123' -> Wrong
    string = '!@#abc123' -> Wrong
    

    有人能帮我吗?


  • 共3个答案

    匿名用户

    您可以要求至少一个字母数字:

    /^(?=[^a-zA-Z0-9]*[a-zA-Z0-9])[a-zA-Z0-9 !@#$%^&*()_~.+,/\" -]+$/
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    此外,我认为您想匹配文字-,因此需要重复它,只需转义,将-_-更改为\-_,或者-更好-移动到字符类的末尾。

    (? =[^a-zA-Z0-9]*[a-zA-Z0-9])模式是一个正字符类,它要求在ASCII字母或数字以外的任何零个或多个字符之后有一个ASCII数字字母,紧邻当前位置的右侧,这里是从字符串的开头开始。

    匿名用户

    只需将[a-zA-Z0-9]添加到正则表达式的开头:

    /^[a-zA-Z0-9][a-zA-Z0-9 \^\\\-!@#$%&*()_~.+,/'"]+$/gm
    

    请注意,如果在一个类(即[])中有四个特殊字符必须通过在其前缀一个后斜杠(\)来转义,以便将其解释为其字面意思:

    // If within a class (ie [...])
    ^ \ - ]
    // If not within a class
    \ ^ $ . * + ? ( ) [ ] { } |
    

    RegEx101

    匿名用户

    如果所有特殊字符都是允许的,并且您认为下划线_也是一个特殊字符,那么您可以像这样简化您的RegEx:

    /^[^\W_].+$/
    

    在这里查看您在Regex101上给出的示例