2017-06-07 92 views
-1

/^ + {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; 
     } 

    }); 
+0

參見例如https://stackoverflow.com/a/37421357/1647737 –

+0

它可能不起作用,因爲用戶無法鍵入所需的最少11個字符與一鍵按... –

+0

這是一個非常奇怪的和非用戶友好的實施。 **不要使用'keypress'功能**。例如,當焦點離開頁面元素時,如果該數字是意外格式,則可以在文本框上顯示*警告*。 (並在後端再次驗證。) –

回答

1

適應從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表單驗證來驗證最終結果。

+0

感謝le_m與IE – HDev007

0

工作part..why正則表達式我認爲這個正則表達式被應用只有到字符代碼,即長度爲1的字符串。在這種情況下正則表達式總是會失敗。

而是嘗試對輸入值運行正則表達式測試。

+0

var regex = new RegExp(「^ \\ + {0,1}(?:\ d \ s?){1,13} $」);試過這也但沒有工作 – HDev007

+0

試試這個正則表達式/ \ + [0-9] +(\ s | $)/ g –

相關問題