【问题标题】:Regex returning part of match instead false when it passes the length正则表达式在通过长度时返回部分匹配而不是 false
【发布时间】:2018-06-28 14:52:13
【问题描述】:

我想检查一个数字序列是否以 4 开头并且正好多出 12 到 15 位(数字长度必须为 13 到 16 位)。

我希望我的正则表达式在小于或大于 {12,15} 时返回 false。

我正在测试这个正则表达式:4{1}\d{12,15},它在数字小于 13 位时有效,在这种情况下它返回 false,但是当它从 15 位传递时,它只返回字符串的一部分而不是 null。 例如:

使用:412345678901 preg_match() 返回:

array()

使用:412345678901234567preg_match() 返回:

array(
    0 => 4123456789012345
)

在第二种情况下,我也希望它为 false,因为长度大于我在 Regex 上设置的 15。

【问题讨论】:

  • preg_match 不是来自 php 吗?
  • 尝试使用锚^4\d{12,15}$
  • 是的,我只是在 PHP Live Regex 上进行测试。但将在 JS "string".match() 上使用它
  • 你是这样测试的吗? ^4\d{12,15}$ 或喜欢phpliveregex.com/p/org
  • @Thefourthbird 工作完美!我发现我使用的是 '&' 而不是 '$' OMG kkkkkk 谢谢!

标签: javascript regex


【解决方案1】:

您应该使用锚点^ 和$ 来断言字符串的开始和结束。

您可以省略 {1} 量词。

^4\d{12,15}$

const strings = [
  "4666666666666",
  "466666666666",
  "46666666666666777"

];
let pattern = /^4\d{12,15}$/;

strings.forEach((s) => {
  console.log(s + " ==> " + pattern.test(s));
});

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 2016-07-26
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    相关资源
    最近更新 更多