【发布时间】:2020-05-09 06:04:46
【问题描述】:
我需要一个正则表达式来验证,
- 长度应为 18
- 前 5 个字符应为 (xyz34|xyz12)
- 其余 13 个字符只能是字母数字字母和数字,不允许使用空格或特殊字符。
我有一个像这里这样的模式,'/^(xyz34|xyz12)((?=.*[a-zA-Z])(?=.*[0-9])){13}/g'
但这是允许空格和特殊字符(如($、% 等))违反规则 #3。
有什么建议可以排除这个空格和特殊字符并严格检查它必须是字母和数字吗?
【问题讨论】:
-
你不需要前瞻,只需要
/^(xyz34|xyz12)[a-zA-Z0-9]{13}$/ -
问题是
.*意味着任何东西都是有效的。 -
你为什么要测试
.*和然后一些字符类?你的意思是[a-zA-Z]*和[0-9]*吗?为什么这些分成两部分?(?=…)是零宽度匹配;它不能有 13 个字符。所有这些都应该更像/^xyz(?:34|12)[a-zA-Z0-9]{13}$/。 -
哦,你不应该量化环视。它们是非消耗模式,即连续的正向前瞻检查它们的模式是否存在但不推进正则表达式索引,它们检查相同位置的文本。重复它们 13 次是没有意义的。
^(xyz34|xyz12)((?=.*[a-zA-Z])(?=.*[0-9])){13}=^(xyz34|xyz12)(?=.*[a-zA-Z])(?=.*[0-9]),表示该字符串可以以xyz34或xyz12开头,然后至少应包含1 个字母和1 个数字。
标签: javascript regex