连字符和下划线永远不能连续,但可以在字符串中多次出现
Hyphen and Underscore should never be continuous but can be present in the string more than once
我有一个要求,我必须验证 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 字母数字字符开头和结尾且不具有 --
、_-
、[=16= 的字符串] 和 __
在其中。
如果你想 "block" 长度为 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 个连续的 -
或 _
在除换行字符 [=53= 以外的任何 0+ 个字符之后的任何位置,则匹配失败的前瞻性检查]
[\xFF01-\xFF5E-]*
- \xFF01-\xFF5E
范围内的任何字符 or/and -
[a-z0-9]
- 字母数字 ASCII 字符
$
- 字符串结尾。
我有一个要求,我必须验证 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 字母数字字符开头和结尾且不具有 --
、_-
、[=16= 的字符串] 和 __
在其中。
如果你想 "block" 长度为 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 个连续的-
或_
在除换行字符 [=53= 以外的任何 0+ 个字符之后的任何位置,则匹配失败的前瞻性检查][\xFF01-\xFF5E-]*
-\xFF01-\xFF5E
范围内的任何字符 or/and-
[a-z0-9]
- 字母数字 ASCII 字符
$
- 字符串结尾。