2017-06-07 8 views
-1

/^ + {0,1}(?:\ d \ s?){11,13} $ /この正規表現では、キー入力のregexを使ってテキストボックスの入力を制限する

私は、ユーザーが唯一のpart..why正規表現は、このシナリオで

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

これはおそらく、ユーザーが1つのキーを押すだけで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

IEで動作するle_mありがとう – HDev007

0

を動作していない場合はどのような正規表現の上でもコードを検証することは、常にに行くことを第一と数字で+を入力することができるはずですしたいです私はこの正規表現が適用されていると思うのみcharコードに長さ1の文字列この正規表現は常に失敗します。

代わりに、入力値に対して正規表現テストを実行してみてください。

+0

var regex = new RegExp( "^ \\ + {0,1}(?:\ d \ s?){1,13} $");これも試してみましたが、うまくいきませんでした – HDev007

+0

この正規表現を試してください/ \ [0-9] +(\ s | $)/ g –

関連する問題