我有一个这样的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
有人能帮我吗?
您可以要求至少一个字母数字:
/^(?=[^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上给出的示例