RegEx-第一个字符不应包含特殊字符,后续字符不应包含少数特殊字符

问题描述 投票:0回答:2

我有一个特定的验证场景。

字符串的第一个字符不应包含特殊字符,我可以使用

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

来实现

但是后续字符不应该包含特定的特殊字符,即

!@$%^*+=\[\]{};:\\|<>?

我尝试使用正则表达式

/^[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?][!@$%^*+=\[\]{};:\\|<>?]+$/
并否定结果,但它不起作用。

我想允许除这些特殊字符之外的所有其他字符,因此我试图否定上述正则表达式的结果。

我的意思是,第一个字符应该接受除特殊字符之外的所有内容,后续字符应该接受除指定特殊字符之外的所有内容。

regex validation
2个回答
1
投票

你很接近。只是缺少在字符类中使用

^
来否定它,也许用
+
而不是
*
来允许空字符串。

匹配字符串开头:

^

匹配不属于 !@#$%^&*()_+-=[]{};':"|,.<>/? 之一的单个字符:
[^!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/\?]

匹配不包含 !@$%^*+=[]{};:|<>?:
[^!@$%^*+=\[\]{};:\\|<>\?]*

之一的任意长度的字符串 匹配字符串结尾:
$

完整的正则表达式:

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


0
投票

你们非常亲密。只需在字符类中错过 ~ ` 即可否定它。

完整的正则表达式:

/^[^!@`~#$%^&*()_+\-=\[\]{};':"\\|,.<>\/\?][^!@$%^*+=\[\]{};:\\|<>\?]*$/
© www.soinside.com 2019 - 2024. All rights reserved.