JQuery電話番号の検証

私は携帯電話番号を検証するためにjQueryの検証プラグインを使用していますし、そこに2/3の方法です。

番号は

  • 空白ではない - 完了、
  • 正確に11桁にする - 完了、
  • '07'で始める - HELP !!

必要なルールはそれ自身で面倒を見せてくれました。フィールドの長さを他のサイトで共有していたカスタムメソッドとして見つけることができました。

カスタムフィールドの長さのコードは次のとおりです。誰でも、どこに追加するコードを提案して、「07」で始まる必要があるのでしょうか?

$.validator.addMethod("phone", function(phone_number, element) {
var digits = "0123456789";
var phoneNumberDelimiters = "()- ext.";
var validWorldPhoneChars = phoneNumberDelimiters + "+";
var minDigitsInIPhoneNumber = 11;
s=stripCharsInBag(phone_number,validWorldPhoneChars);
return this.optional(element) || isInteger(s) && s.length >= minDigitsInIPhoneNumber;
}, "* Your phone number must be 11 digits");

function isInteger(s)
{ var i;
for (i = 0; i < s.length; i++)
{
// Check that current character is number.
var c = s.charAt(i);
if (((c < "0") || (c > "9"))) return false;
}
// All characters are numbers.
return true;
}
function stripCharsInBag(s, bag)
{ var i;
var returnString = "";
// Search through string's characters one by one.
// If character is not in bag, append to returnString.
for (i = 0; i < s.length; i++)
{
// Check that current character isn't whitespace.
var c = s.charAt(i);
if (bag.indexOf(c) == -1) returnString += c;
}
return returnString;
}
$(document).ready(function(){
$("#form").validate();
});
3

4 答え

問題のコードは、これを解決する非常に複雑な方法のようです。長さ、接頭辞、すべての文字が1つの正規表現で数字であることを確認することができます:

if (!/^07\d{9}$/.test(num)) {
  //"Invalid phone number: must have exactly 11 digits and begin with "07";
}

/^ 07 \ d {9} $/の説明 - 文字列の先頭に「07」が続き、その後にちょうど9桁が続き、その後に文字列の終わりが続きます。

それを関数に入れたいのであれば:

function isValidPhoneNumber(num) {
   return /^07\d{9}$/.test(num);
}

将来、接頭辞をテストしたくない場合は、次のように数値と長さだけをテストできます:

/^\d{11}$/
2
追加された
はい、私はそれが何のために複雑に見えることに同意しますが、私は以前のjQueryバリデータにメソッドを追加していたので、この方法だと思いましたか?
追加された 著者 user1105056,

この関数を使うことができます:

function checkFirstDigits(s, check){
    if(s.substring(0,check.length)==check) return true;
    return false;
}

s would be the string, and check would be what you are checking against (i.e. '07').

2
追加された
+1は簡単に再利用可能な関数=)
追加された 著者 David Thomas,

すべての答えをありがとう。私はnnnnnnの正規表現を使ってこれを考え出しました。誤った値が入力されたときに35行のコードが6に減少したときにカスタムエラーメッセージが表示されます。

$.validator.addMethod("phone", function(phone_number, element) { 
  return this.optional(element) || /^07\d{9}$/.test(phone_number); 
}, "* Must be 11 digits and begin with 07");

$(document).ready(function(){
        $("#form").validate();
});

正規表現のためのnnnnnnに余分なおかげで! :D

1
追加された

indexOf()を使用します。

if (digits.indexOf('07') != 0){
   //the digits string, presumably the number, didn't start with '07'
}

参照:

0
追加された
私はちょうど間違いが(digits.indexOf(07)!= '07') ...良い悲しみ..!)、しかし、あなたの質問に答えて:いいえ( JS Fiddleのデモ)。
追加された 著者 David Thomas,
'10706'は真実を返すでしょう....右?
追加された 著者 Tim Withers,
今日何か新しいことを学びました!それは私の割り当てに達したことを意味し、それを残りの日の間中止することを意味しています。
追加された 著者 Tim Withers,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript