2012-05-13 26 views
0

私はいくつかの検索を行い、他の人がこの質問をして回答するが、私がしようとしているものに合っていないようだ。基本的に私はエントリとして(123)4567890を受け入れる電話エントリの検証に取り組んでいます。私はすでに1234567890のような単純な数字の文字列を受け入れるものと、ダッシュ123-456-7890を受け入れるものを実装しました。私はちょっとした間違いをしているのを知っていますが、私が間違っていることを理解できません。Javascript電話番号の確認パラメトリックサイン

はここで働いているダッシュフォームと電話番号です:

//Validates phone number with dashes. 
function isTwelveAndDashes(phone) { 

    if (phone.length != 12) return false; 

    var pass = true; 

    for (var i = 0; i < phone.length; i++) { 
     var c = phone.charAt(i); 

     if (i == 3 || i == 7) { 
      if (c != '-') { 
       pass = false; 
      } 
     } 
     else { 
      if (!isDigit(c)) { 
       pass = false; 
      } 
     } 
    } 

    return pass; 
}​ 

を、これは私が動作するように管理することはできませんものです。

function isTwelveAndPara(phone) { 
    if (phone.length != 12) return false; 

    var pass = true; 

    for (var i = 0; i < phone.length; i++) { 
     var c = phone.charAt(i); 

     if (i == 0) { 
      if (c != '(') { 
       pass = false; 
      } 
     } 

     if (i == 4) { 
      if (c != ')') { 
       pass = false; 
      } 
     } 
     else { 
      if (!isDigit(c)) { 
       pass = false; 
      } 
     } 
    } 

    return pass; 
}​ 
+2

電話番号を確認する方法は次のとおりです。**しない**あなたのユーザーが海外にいる場合はどうなりますか?拡張子があればどうなりますか?妥当性検査から得られる利益は、通常、クローズするつもりはないと判断したドアを閉めることによって洗い流されます。 (有効な*電話番号を確実に取得することはできません。どんな検証ルールでも、実際の偽の番号で欺かれる可能性があります) –

+0

これは商用ウェブサイトには使用されていませんが、 。私は何が間違っているのか見たいと思っています。私は(と)文字のif文を使ってif文を知っていますが、両方をif(&&)文に結合する正しい構文が不明です。 –

+0

@ T.J.Crowder。文字列パターンのチェックは 'regex'を使って行うべきであることを忘れてしまいました... +1 – gdoron

答えて

2

あなたはregexで非常に簡単にそれを行うことができます。

return !!phone.match(/\(\d{3}\)\d{7}/g) 

Live DEMO


を更新:あなたが忘れてしまったので

あなたが持っていたコードは動作しませんでしたelse if

else if (i == 4) { // Added the "else" on the left. 
+0

gdoronとは、正規表現と呼ばれるものです。彼の答えの補足:Mozillaの[RegExp docs](https://developer.mozilla.org/ja/JavaScript/Guide/Regular_Expressions)または[自分で試してみる](http://www.regular-expressions.info /javascriptexample.html)。 – briangonzalez

+0

似たような質問に答えてこの例を見ました。私はそれが動作することを疑うことはありません(実際には私が示しているものよりも良いプログラミングです)が、私は同じスタイルのisTwelveAndDashes(電話)機能の中にとどまる必要がある練習の目的のために。 –

+0

@ JoshuaAslanSmith。 OK。アップデートをご覧ください。 – gdoron

0

RegExpルールのようなものは、どちらのルールとも一致するかどうかを確認できます。

var numbers = ['(1234567890','(123)4567890','123-456-7890','1234567890','12345678901']; 
var rule = /^(\(\d{3}\)\d{7}|\d{3}-\d{3}-\d{4}|\d{10})$/; 
for (var i = 0; i < numbers.length; i++) { 
    var passed = rule.test(numbers[i].replace(/\s/g,'')); 
    console.log(numbers[i] + '\t-->\t' + (passed ? 'passed' : 'failed')); 
} 

EDIT:

function isDigit(num) { 
    return !isNaN(parseInt(num)) 
} 
function isTwelveAndPara(phone) { 
    if (phone.length != 12) return false; 
    for (var i = 0; i < phone.length; i++) { 
     var c = phone.charAt(i); 
     if (i == 0) { 
      if (c != '(') return false; 
     } else if (i == 4) { 
      if (c != ')') return false; 
     } else if (!isDigit(c)) return false; 
    } 
    return true; 
} 

// or... 

function isTwelveAndPara(phone) { 
    if (phone.length != 12 || phone.charAt(0) != '(' || phone.charAt(4) != ')') return false; 
    for (var i = 1; i < phone.length, i != 4; i++) { 
     if (!isDigit(phone.charAt(i))) return false; 
    } 
    return true; 
} 
+0

似たような質問に答えてこの例を見ました。私はそれが動作することを疑うことはありません(実際には私が示しているものよりも良いプログラミングです)が、私は同じスタイルのisTwelveAndDashes(電話)機能の中にとどまる必要がある練習の目的のために。 –

+0

ありがとうございます。私はそれが信じられないほど単純で愚かなものだと分かっていました。 –

+0

問題ありません。私はあなたの関数に代わるものを書いています。 – inhan

0

正規表現との電話番号を確認するには、確かに移動するための方法です。ここでは、スペース、括弧とダッシュを無視検証 機能は次のとおりです。

check_phone(num) { 
    return num.replace(/[\s\-\(\)]/g,'').match(/^\+?\d{6,10}$/) != null} 

あなたは2番目の正規表現{6,10}で範囲を受け入れるように桁数を変更することができます。先頭は+です。