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

ws51t4hk  于 2022-11-18  发布在  Java
关注(0)|答案(2)|浏览(197)

我有一个Javascript正则表达式,如下所示:

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

其允许以下条件:
1.只允许字母
1.只允许数字
1.允许字母和数字组合
1.允许字母、数字和特殊字符的组合
我想修改上面的正则表达式,以涵盖两个更多的情况如下:
仅不允许使用特殊字符
字符串不能以特殊字符开头
所以我基本要求是:

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

有人能帮我一下吗?

dojqjjoe

dojqjjoe1#

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

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

另外,我认为您希望匹配文字-,因此需要重复它,只需转义,将-_-更改为\-_,或者-更好-移动到字符类的末尾。
(?=[^a-zA-Z0-9]*[a-zA-Z0-9])模式是一个正字符类,它要求在零个或多个字符(ASCII字母或数字除外)之后紧跟一个ASCII字母或数字,位于当前位置的右侧,此处,从字符串的开头开始。

3wabscal

3wabscal2#

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

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

请注意,如果在类(即[ ... ])中有四个特殊字符,则必须通过在其前面加上反斜杠(\)来对其进行转义,以便将其解释为其字面含义:

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

RegEx101

相关问题