【问题标题】:“combine” 2 regex with a logic or?“结合” 2 正则表达式与逻辑或?
【发布时间】:2017-09-29 12:36:47
【问题描述】:

我有两种 javascript 模式:

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

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

10或任意数字的OR字符串如何表达?

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

由于某种原因不起作用。它至少通过了

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

A-z0-9 字符串不是数字,长度不是 10。

【问题讨论】:

    标签: javascript regex logic


    【解决方案1】:

    请注意,您的 ^([A-z0-9]{10})|(\d+)$ 模式匹配字符串开头的 A-z0-9 范围内的 10 个字符(^ 仅修改 ([A-z0-9]{10}) 部分(第一个替代分支)或 (|)与(\d+)$ 结尾的1 个或多个数字($ 仅修改(\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+ - 1 位或多位数字
    • ) - 分组结构结束
    • $ - 字符串结束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多