我正在为以下验证字符串编写正则表达式。我编写了以下正则表达式。
^[^\s]+[a-z]{0,}(?!.* {2})[ a-zA-z]{0,}$
它验证了
- 开头没有空格。
- 不允许有两个连续空格。
- 问题是它允许使用单个特殊字符。它不应允许使用特殊字符,除非它以字母数字字符为后缀或前缀。
示例:
#
-> 不允许。
#A
或A#
或A2
或3A
。
最佳答案
一种选择是断言字符串不包含单个“特殊”字符或使用负前视彼此相邻的 2 个特殊字符。
^(?!.*[^a-zA-Z0-9\s][^a-zA-Z0-9\s])(?!.*(?:^| )[^a-zA-Z0-9\s](?!\S))\S+(?: \S+)*$
说明
^
字符串开头(?!
负向前瞻,断言右侧不包含.*[^a-zA-Z0-9\s][^a-zA-Z0-9\s]
匹配除 a-zA-Z0-9 或 a 之外的 2 个字符彼此相邻的空白字符
)
关闭前瞻(?!
负向前瞻,断言右侧不包含.*(?:^| )[^a-zA-Z0-9\s](?!\S)
匹配 a-zA-Z0-9 以外的单个字符或一个空白字符
)
关闭前瞻\S+(?:\S+)*
匹配 1 个以上非空白字符,并可选择重复一个空格和 1 个以上非空白字符$
字符串结尾
关于javascript - 正则表达式不允许没有前缀或后缀的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64130407/