【问题标题】:How to validate input field with JavaScript如何使用 JavaScript 验证输入字段
【发布时间】:2017-08-02 21:27:31
【问题描述】:

如果我有一个带有某个正则表达式的模式属性的输入字段,是否有一个 JavaScript/JQuery 函数可以访问该输入 DOM 元素,并验证其中的当前值是否符合模式?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    HTMLInputElement.checkValidity()supported by IE 10 and later 将同时检查所有约束。

    console.log(document.getElementById('a').checkValidity())
    console.log(document.getElementById('b').checkValidity())
    <input id="a" pattern="a+" value="aaaa" />
    <input id="b" pattern="a+" value="aaba" />

    【讨论】:

      【解决方案2】:

      您将需要使用 HTML5 Validity Framework(检查“使用 JavaScript 验证表单”部分),它为每个已设置验证的字段提供一个 validity 对象。这个validity 对象公开了一组“有效性约束”(HTML5 原生提供的每种验证类型都有一个)。

      在您的情况下,您需要检查元素上的 validity.patternMismatch 以查看它是否无效。但是,当仅对元素应用一种类型的验证时,validity.valid 就足够了。

      下面,我们有一个表单域,它既是必需的,又为它设置了模式。在这种情况下,仅仅知道字段无效可能不足以满足您的目的,因此代码不仅会告诉您元素是否无效,还会显示您可以检查各个约束以了解原因。

      尽量不要输入任何数据并单击提交按钮。这将告诉您该元素无效,但如果您查看约束报告,您将看到 valueMissing = true 在这种情况下。然后尝试只输入几个字符,您仍然会看到它显示为无效,但在这种情况下会显示patternMismatch = true

      var field = document.getElementById("ss");
      var btn = document.getElementById("btnValidity");
      
      btn.addEventListener("click", function(evt){
      
        console.clear();
      
        // You can test for simple validity with the valid property
        console.log("Is field valid? " + ss.validity.valid);
        
        // And, you can get more specific by checking all the validity constraints
        // Here, we're just looping the entire set for demo purposes
        for(var constraint in ss.validity){
          if(ss.validity[constraint]){
            console.log(constraint + " = " + ss.validity[constraint]);
          }
        }
        
      });
      /* Valid and invalid elements can show their state in real time with CSS pseudo-classes */
      input[type=text]:active, input[type=text]:focus { outline:none;  }
      input[type=text]:valid { box-shadow:0 0 3px green; }
      input[type=text]:invalid { box-shadow:0 0 3px red; }
      SS#: <input type="text" required pattern="^\d{3}-\d{2}-\d{4}$" id="ss" placeholder="xxx-xx-xxxx">
      <button id="btnValidity">Check validity</button>

      【讨论】:

        【解决方案3】:

        $(function () {
            var $input = $('#my-input');  
              
            $input.on('change', function () {
                var pattern = $input.attr('data-my-pattern-attr');
                var regex = new RegExp(pattern, "g");
        
                if ($input.val().match(regex)) {
                    console.log('matches');
                } else {
                    console.log('no match');
                }
            });
        });
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        
        <input type="text" id="my-input" data-my-pattern-attr="[a-z]+" />

        【讨论】:

        • 该问题未使用 JQuery 标记。
        • @ScottMarcus OP 在问题中指定“javascript/jquery”。
        • 啊,没看到。标题和问题仅用 JavaScript 标记。
        • 是的,没有问题 :)
        • 当我只能使用 html5 模式属性时,为什么要使用自定义 data-my-pattern-attr?
        猜你喜欢
        • 1970-01-01
        • 2015-09-20
        • 1970-01-01
        • 2016-11-16
        • 2021-12-24
        • 2021-12-11
        • 2011-04-25
        • 2017-09-11
        相关资源
        最近更新 更多