“结合”2正则表达式与逻辑或?

时间:2017-09-29 12:36:47

标签: javascript regex logic

我有两种javascript模式:

/^[A-z0-9]{10}$/ - 长度为10个字母数字符号的字符串。

/^\d+$/ - 任意数量的至少一个长度。

如何使OR字符串的表达式为10或任何数字?

var pattern = /^([A-z0-9]{10})|(\d+)$/;

由于某种原因没有工作。它至少通过

pattern.test("123kjhkjhkj33f");  // true  

这不是A-z0-9字符串的数字而不是10的长度。

1 个答案:

答案 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+ - 一位或多位
  • ) - 分组构造的结尾
  • $ - 字符串结尾