防止正则表达式实时输入非数字

时间:2017-09-29 12:18:43

标签: javascript jquery

我想阻止使用正则表达式键入无数字符但它不起作用

$(document).ready(function() {
    $('#CodeField').val('');
    var numberPattern = /[0-9]/;
    $("#PhoneField").keydown(function (e) {
        var inputValue = $(this).val();
        var inputObject = $(this);
        setTimeout(function () {
            if(inputObject.val().indexOf('09')!== 0){
                inputObject.val(inputValue);
            }
        })
        if(inputObject.val().match(numberPattern) == false){
            e.preventDefault();
            return false;
        }
    })
});


<form id="msform">
    <input type="text" id="PhoneField" value="09" class="phoneBox" maxlength="11"/>
    <input type="button" value="دریافت کد" id="SendPhone"/>

3 个答案:

答案 0 :(得分:1)

请注意,这可以通过HTML5的tel输入实现,这在语义上是正确的。

当您添加pattern属性并将正则表达式[0-9]{,11}required属性结合使用时,浏览器会在您提交表单时发送表单之前进行快速检查。在这种情况下,浏览器将检查输入是否包含0到11位数字。您可能希望将其设置为更合理的范围,例如9到11位数:[0-9]{9,11}

&#13;
&#13;
<form id="msform">
  <input type="tel" id="PhoneField" value="09" pattern="[0-9]{,11}" required class="phoneBox">
  <input type="submit" value="دریافت کد" id="SendPhone">
</form>
&#13;
&#13;
&#13;

或者如果必须以09开头:

&#13;
&#13;
<form id="msform">
  <input type="tel" id="PhoneField" value="09" pattern="09[0-9]{7,9}" required class="phoneBox">
  <input type="submit" value="دریافت کد" id="SendPhone">
</form>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使您的代码更简单,更轻松(您检查多项内容并应用正则表达式搜索):

$("#PhoneField").keydown(function (e) {
  $(this).val($(this).val().replace(/\D/g,''));
}

只需用空字符串替换代码中的任何非数字。

我提供的代码不会在您的代码开头进行09检查,但是您的代码也不起作用。在您的代码中:

var inputValue = $(this).val();

设置&#34; inputValue&#34;只要keydown效果触发。这意味着如果有人没有他们的输入开始于&#34; 09&#34;它将替换为完全相同的值。

在您的RegEx的旁注上 - 它检查/ [0-9] /,这是单数数字。它永远不会匹配一个电话号码。 相反,人们可以用以下内容代替:

var numberPattern = /[0-9]+/;

答案 2 :(得分:0)

您可以使用正则表达式删除更改时的非数字字符。

"SELECT month(date) AS month , COUNT(id) AS sales FROM orders WHERE date BETWEEN ? AND ? GROUP BY month(`date`) ORDER BY month(`date`)" 表示不是数字,应该做得很好:

\D

相关问题