This question already has answers here:
HTML input that takes only numbers and the + symbol
                                
                                    (7个答案)
                                
                        
                2年前关闭。
            
        


  / ^ + {0,1}(?:\ d \ s?){11,13} $ /此正则表达式仅允许+放在首位和仅数字...


在按键上,我希望用户只能首先输入+以及上面正则表达式可以验证的数字,但是如果部分的话,代码总是转到..为什么正则表达式在这种情况下不起作用

function ValidatePhone(phone) {
            var expr = /^\+?(?:\d\s?){11,13}$/;
            return expr.test(phone);
        }


var countofPlus = 0;

    $("#phone").on("keypress", function (evt) {
        if (evt.key == "+")
        {
            countofPlus = countofPlus + 1;
            if (countofPlus > 1 || this.value.length >= 1) {
                return false;
            }
            else return true;
        }
        var charCode = (evt.which) ? evt.which : event.keyCode
        if (charCode > 31 && charCode != 43 && charCode != 32 && charCode != 40 && charCode != 41 && (charCode < 48 || charCode > 57))
            return false;
        return true;
    });
$("#phone").on("keyup", function (evt) {
        debugger;
        if (evt.key == "+") {
            countofPlus--;
            return true;
        }

    });

最佳答案

使HTML input that takes only numbers and the + symbol中的答案适应您的用例会产生以下(IE-)兼容代码:



// Apply filter to all inputs with data-filter:
var inputs = document.querySelectorAll('input[data-filter]');

for (var i = 0; i < inputs.length; i++) {
  var input = inputs[i];
  var state = {
    value: input.value,
    start: input.selectionStart,
    end: input.selectionEnd,
    pattern: RegExp('^' + input.dataset.filter + '$')
  };

  input.addEventListener('input', function(event) {
    if (state.pattern.test(input.value)) {
      state.value = input.value;
    } else {
      input.value = state.value;
      input.setSelectionRange(state.start, state.end);
    }
  });

  input.addEventListener('keydown', function(event) {
    state.start = input.selectionStart;
    state.end = input.selectionEnd;
  });
}

<input id='tel' type='tel' data-filter='\+?\d{0,13}' placeholder='phone number'>





上面的代码将复制和粘贴,选择,后退间距等因素考虑在内,以防止当前实施失败。

另外,我将给定的正则表达式修改为\+?\d{0,13},以允许输入不完整。使用HTML5表单验证来验证最终结果。

关于javascript - 使用正则表达式限制文本框中的输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44417888/

10-15 03:21
查看更多