我有一个要求,我必须在Excel中验证字段。
[a-zA-Z0-9]
开头和结尾,但不能使用任何特殊字符[-_]
A--Badasd
(不允许)A__Bsdasdas
(不允许)A-_fdsfdsd
(不允许)A_-sfsdfsdf
(不允许)A-B-adf
(允许)A_b_adads
(允许)我想出了以下正则表达式,然而,它似乎甚至不接受“ - ”和“_”的非连续条目。
^[a-zA-z0-9]+(([\xFF01-\xFF5E]+|[\\-\\_])+)[a-zA-Z0-9]+$
[\xFF01-\xFF5E]
是不允许任何双倍宽度字符,所以请忽略它,因为它工作正常。
任何帮助都会非常明显。
答案 0 :(得分:0)
我只能建议一个基于前瞻的模式(因为[\xFF01-\xFF5E]
匹配_
并且在JS regex中限制它将使模式更加繁琐):
/^[a-z0-9](?:(?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9])?$/i
请参阅regex demo。
此模式也将匹配1个字符长度的字符串,并且只匹配以ASCII字母数字字符开头和结尾的字符串,而不是--
,_-
,-_
和其中__
。
如果你想"阻止"长度为1的字符串,即将最小匹配长度设置为2,您应该从上面的模式中移除(?:
和)?
:
/^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i
<强>详情
^
- 字符串开头[a-z0-9]
- 字母数字ASCII字符(?:(?!.*?[-_]{2})[\xFF01-\xFF5E_-]*[a-z0-9])?
- 可选的(1或0次出现)序列:
(?!.*?[-_]{2})
- 如果在除了换行符之外的任何0 +字符之后的任何地方有2个连续的-
或_
,则前瞻检查会使匹配失败[\xFF01-\xFF5E-]*
- \xFF01-\xFF5E
范围内的任何字符或/和-
[a-z0-9]
- 字母数字ASCII字符$
- 字符串结束。