Javascript 连字符和下划线不能是连续的,但可以多次出现在字符串中
我有一个要求,我必须在Excel中验证一个字段 验证:Javascript 连字符和下划线不能是连续的,但可以多次出现在字符串中,javascript,regex,special-characters,regex-negation,Javascript,Regex,Special Characters,Regex Negation,我有一个要求,我必须在Excel中验证一个字段 验证: 字段应以[a-zA-Z0-9]开头和结尾,但不得以任何特殊字符开头和结尾[-\] 它不能连续多次包含“-”和“u”。 示例: A--Badasd(不允许) A_uubsdasdas(不允许) A-\u fdsfdsd(不允许) A_uu-sfsdfsdf(不允许) A-B-adf(允许) A_b_adads(允许) 我提出了下面的正则表达式,但是,它似乎不接受“-”和“\ux”的非连续条目 [\xFF01-\xFF5E]不允许使用任何双宽
[a-zA-Z0-9]
开头和结尾,但不得以任何特殊字符开头和结尾[-\]
示例:
A--Badasd
(不允许)A_uubsdasdas
(不允许)A-\u fdsfdsd
(不允许)A_uu-sfsdfsdf
(不允许)A-B-adf
(允许)A_b_adads
(允许)[\xFF01-\xFF5E]
不允许使用任何双宽度字符,因此请忽略它,因为它工作正常
任何帮助都会非常可观。我只能建议一种基于前瞻的模式(因为
[\xFF01-\xFF5E]
匹配。
在JS regex中限制它会使模式更麻烦):
看
此模式也将匹配长度为1个字符的字符串,并且仅匹配以ASCII字母数字字符开头和结尾的字符串,这些字符串中没有-
、-
、-
和-
如果要“阻止”长度为1的字符串,即将最小匹配长度设置为2,则应从上述模式中删除(?:
和)?
:
/^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i
详细信息
-字符串的开头^
-字母数字ASCII字符[a-z0-9]
-可选的(1次或0次)序列:(?:(?!*?[-\u]{2})[\xFF01-\xFF5E-]*[a-z0-9])?
-如果在任何0+字符(换行符除外)之后的任何位置有两个连续的(?!*?[-[u]{2})
或-
字符,则前瞻检查将使匹配失败-
-范围内或/和[\xFF01-\xFF5E-]*
-
-字母数字ASCII字符[a-z0-9]
-字符串结束$
[\xFF01-\xFF5E]
匹配\u
并且在JS regex中限制它会使模式更麻烦):
看
此模式也将匹配长度为1个字符的字符串,并且仅匹配以ASCII字母数字字符开头和结尾的字符串,这些字符串中没有-
、-
、-
和-
如果要“阻止”长度为1的字符串,即将最小匹配长度设置为2,则应从上述模式中删除(?:
和)?
:
/^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i
详细信息
-字符串的开头^
-字母数字ASCII字符[a-z0-9]
-可选的(1次或0次)序列:(?:(?!*?[-\u]{2})[\xFF01-\xFF5E-]*[a-z0-9])?
-如果在任何0+字符(换行符除外)之后的任何位置有两个连续的(?!*?[-[u]{2})
或-
字符,则前瞻检查将使匹配失败-
-范围内或/和[\xFF01-\xFF5E-]*
-
-字母数字ASCII字符[a-z0-9]
-字符串结束$
(?:
和最后一个)?
,它还将“阻止”1字符字符串。我添加了长度为2的字符串的模式变化,直到答案。这就像一个符咒,但是,我同意你提出的第一个建议,它甚至可以阻止单个字符字符串。只是为了在数据验证部分更加严格……是的,这些要求应该在问题本身中公布。但是您可以只删除(?:
和最后一个)?
,它还将“阻止”1字符字符串。我添加了长度为2的字符串的模式变化,直到答案。
/^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i