【问题标题】:Issue while checking pattern with regex使用正则表达式检查模式时出现问题
【发布时间】:2020-11-24 15:24:50
【问题描述】:

我在手动检查我的输入是否与我的模式匹配时遇到问题

这是我用来检查的函数

if (!$element.attr("pattern")) return true;

    let pattern = $element.attr("pattern");
    let exp;
    if (pattern.charAt(0) === "^") exp = new RegExp(pattern);
    else exp = new RegExp('^' + pattern + '$');

    if (exp.test($element.val())) return true;
    else {
        return false;
    }

我已经检查了没有我用来设置 var "exp" 的 ifelse,但结果是一样的。

这是我要检查的输入

<input class="k-textbox cyclique-input-popin" type="text" pattern="^[0-9]+([,][0-9])?$"/>

它的值是 0,25,我希望它能够具有这样的值:

  • 1,25
  • 1,2
  • 0,2
  • 20
  • ...

可以有“,”或没有,但不能有尾随零,如 1,20

【问题讨论】:

    标签: javascript html regex


    【解决方案1】:

    (1) 您当前的模式允许尾随零,并且 (2) 该模式只允许逗号右侧的一位数字。你想要这样的东西:

    <input ... pattern="^[0-9]+(,[0-9]*[^0])?$">
    

    最后,你的代码可以简化一些:

    let pattern = $element.attr('pattern');
    if (!pattern) {
      return true;
    }
    
    let exp;
    if (pattern[0] === '^') {
      exp = new RegExp(pattern);
    } else {
      exp = new RegExp('^' + pattern + '$');
    }
    
    return exp.test($element.val()));
    

    让我知道这是否会为您提供所需的结果。祝你好运。

    【讨论】:

    • 谢谢,它完全符合我的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多