我有两种javascript模式:
/^[A-z0-9]{10}$/
- 长度为10个字母数字符号的字符串。
和
/^\d+$/
- 任意数量的至少一个长度。
如何使OR字符串的表达式为10或任何数字?
var pattern = /^([A-z0-9]{10})|(\d+)$/;
由于某种原因没有工作。它至少通过
pattern.test("123kjhkjhkj33f"); // true
这不是A-z0-9
字符串的数字而不是10的长度。
答案 0 :(得分:3)
请注意,您的^([A-z0-9]{10})|(\d+)$
模式与字符串开头的A-z0-9
范围内的10个字符匹配(^
仅修改([A-z0-9]{10})
部分(第一个替代分支) ),或(|
)在(\d+)$
的搅拌结束时有一个或多个数字($
仅修改(\d+)
分支模式。
另请注意,A-z
是拼写错误[A-z]
does not only match ASCII letters。
您需要按如下方式修复它:
var pattern = /^(?:[A-Za-z0-9]{10}|\d+)$/;
或使用i
修饰符:
var pattern = /^(?:[a-z0-9]{10}|\d+)$/i;
请参阅regex demo。
请注意,分组在此非常重要:(?:...|...)
会使锚点适当地适用于每一个。
<强>详情
^
- 字符串开头(?:
- 非捕获交替组:
[A-Za-z0-9]{10}
- 10个字母数字字符|
- 或\d+
- 一位或多位)
- 分组构造的结尾$
- 字符串结尾