我有一个要求,我必须验证 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]
不允许任何双宽字符,因此请忽略它,因为它工作正常。
任何帮助将不胜感激。
最佳答案
我只能建议基于前瞻的模式(因为 [\xFF01-\xFF5E]
匹配 _
并且在 JS 正则表达式中限制它将使模式更加麻烦):
/^[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})
- 前向检查,如果有 2 个连续的-
或,则匹配失败_
除换行符之外的任何 0 个以上字符之后的任意位置[\xFF01-\xFF5E-]*
-\xFF01-\xFF5E
范围内的任何字符或/和-
<[a-z0-9]
- 字母数字 ASCII 字符
$
- 字符串结尾。
关于javascript - 连字符和下划线永远不应该是连续的,但可以在字符串中多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46233558/