2012-06-22 10 views
9

カナダの郵便番号をRegexで検証するためのJavaScriptがJavaScriptで書かれていますが、動作していないようです。ここではスクリプトは次のとおりです。カナダの郵便番号の正規表現の検証

文の場合:

if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length < 12) { 
    alert("Please fill in field Postal Code. You should only enter 7 characters"); 
    myform.zip.focus(); 
    return false; 
    } 

機能:

function okNumber(myform) { 
    var regex = /^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$/; 
    if (regex.test(myform.zip.value) == false) { 
    alert("Input Valid Postal Code"); 
    myform.zip.focus(); 
    return false; 
    } 

    return true; 
} 
+0

'{1} 'のビジネスは無意味です。 '[]'文字クラスはすでに暗黙の '{1}'ですが、 '\ d'や他の文字と一致するものと同じです。それを超えて、これはどうやって動かないのですか?入力に先行/後続の空白がないことを確認しましたか? –

+0

入力と出力の例は何ですか?または、まったく動作しません – Charlie

+2

有効なカナダの郵便番号の規則は何ですか?この正規表現はどのテスト入力に失敗しますか? –

答えて

3

正規表現のアプローチは、format of a Canadian postcodeを検証することができますが、それは郵便番号が実際にが存在することを保証するのに十分ではありません。例えば

A9A 0A0が有効カナダの郵便番号のように見えるが、前方の仕分けエリアA9Adoesn't actually exist

ポストコードの正式なリストに対して何らかの検索を行うのではないですか?

+0

私はフォーマットを検証する必要があります。 –

+2

その場合、 '^ [A-Z] \ d [A-Z] []?\ d [A-Z] \ d $' [は動作します](http://regexr.com?31b0q)。この正規表現があなたのプログラムで動作しない場合は、論理エラー(falseの代わりにtrue?)、正規表現コードを間違って呼び出すこと、まったく呼び出さないことがあります。 –

+0

それは動作していません。 http://depressionnovascotia.com/でフォームをお試しください –

0

最初のエラーは、最初のifステートメントの最後の条件です。 myform.zip.value.length < 12は常に真でなければならないので、コードのこの部分は常に"Please fill in field Postal Code. You should only enter 7 characters"というメッセージを警告し、zipフィールドにフォーカスを戻します。有効な郵便番号は最大7文字なので、myform.zip.value.length > 7に変更する必要があります。

この修正を行った後、コメントに記載されている郵便番号T2X 1V4が有効となります。しかし、あなたが使用した正規表現は(コメントにも述べられているように)単純化することができます。それらが冗長であるため、{1}のすべてのインスタンスを削除できます。おそらく、*ではなく、?という空白をたどることも考えられます。 ?は、直前の文字または式が0または1回表示されることを意味し、*は、0またはと表示され、さらに回表示されることを意味します。私は、あなたが郵便番号の中の1つのスペースしか必要としないと思う。

<!doctype html> 
<html> 
<head> 
    <title>JavaScript Regex Tester</title> 
    <meta charset="utf-8"> 
    <script> 
     function validate(myform) { 
      if (myform.zip.value == "" || myform.zip.value == null || myform.zip.value == "Postal Code" || myform.zip.value.length > 7) { 
       alert("Please fill in field Postal Code. You should only enter 7 characters"); 
       myform.zip.focus(); 
       return false; 
      } 

      return okNumber(myform); 
     } 

     function okNumber(myform) { 
      var regex = /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] *\d[A-Z]\d$/; 
      if (regex.test(myform.zip.value) == false) { 
       alert("Input Valid Postal Code"); 
       myform.zip.focus(); 
       return false; 
      } 

      return true; 
     } 
    </script> 
</head> 
<body> 
    <form action="#" name="myform" method="post"> 
     <input type="text" name="zip" value="Postal Code" /> 
     <input type="button" value="Submit" onclick="validate(document.myform);"/> 
    </form> 
</body> 
</html> 

最後の注意、あなたは正規表現で[A-Z]を見ると、通常はそれが、少なくともそれが大文字または受け入れること[A-Za-z]をするかどうかを検討する価値がある:

ここで私はこれをテストして完全に動作するコードです小文字。これがカナダの郵便番号の場合はわかりませんが、通常、ほとんどの書式では入力を受け入れ、必要に応じて訂正する必要があります。

4

これは、すべてのカナダの郵便番号のために動作します。..ここ

^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$ 
2

は、ルールはこれは私が使用してカナダの郵便番号の有効な表現である http://en.wikipedia.org/wiki/Postal_code#Reserved_characters

ABCEGHJKLMNPRSTVXY <-- letter used 
DFIOQU <-- letters not used because it mixes up the reader 
WZ  <-- letters used but not in the first letter 
With that in mind the following in the proper regex 

@[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][\s][0-9][ABCEGHJKLMNPRSTVWXYZ][0-9] 
0

です。 A0A 0A0と厳密にフォーマットされます。これは、カナダの郵便番号のために尽くします

/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d$/ 
0

/^[a-z][0-9][a-z][- ]?[0-9][a-z][0-9]$/i 

それは、スペースやハイフンとの適切なXの#Xの#のXの#フォーマットが可能になります。