2011-02-06 12 views
2

私はいくつかの宿題を完了しようとしていますが、その本が間違っている可能性があります。私は単純なhtmlページを持っているので、ユーザーはアメリカンエクスプレスのクレジットカードを選ぶことができます。その後、ユーザーは数字を入力し、正規表現に基づいて数字を評価します。私の質問は、test()がブール値または文字列を返す数値を評価するときに終わるのですか?私はその文字列かブール値を比較する必要がありますか? True == trueは、ネストされたif文のコードを起動します。本が私に有効なコードとして与えるものをHeres:test()を使用した正規表現によるクレジットカード確認

if(document.forms[0].cardName.value == "American Express") 
{ 
    var cardProtocol = new RegExp("^3[47][0-9]{13}$"); //REGEX ENTRY HERE 
    if(cardProtocol.test(document.forms[0].cardNumber.value))  
     document.forms[0].ccResult.value = "Valid credit card number"; 
} 

上記のコードは、Firefoxでは動作しません。私は確かに数は良好であり、ブール値が良いようにするために2つのアラートでそれを修正しようとしたん...そして、まだ運ました:

if(document.forms[0].cardName.value == "American Express") 
{ 
    var cardProtocol = new RegExp("^3[47][0-9]{13}$"); //REGEX ENTRY HERE <------ 
    alert(document.forms[0].cardNumber.value) 
    alert(cardProtocol.test(document.forms[0].cardNumber.value)) 
    if((cardProtocol.test(document.forms[0].cardNumber.value)) == true) // <--Problem 
    { 
     document.forms[0].ccResult.value = "Valid credit card number"; 
    } 
    else 
    { 
     document.forms[0].ccResult.value = "Invalid credit card number"; 
    } 
} 

任意のアイデア? ifループが原因ですが、なぜ動作していないのか分かりません。 ifループのコードを投げてください!助けてくれてありがとう!

+0

[MDC:正規表現の使用](https://developer.mozilla.org/ja/JavaScript/Guide/Regular_Expressions#Working_with_Regular_Expressions)を参照してください。また、適切な[クレジットカード確認チェックデジットルーチン](http ://www.beachnet.com/~hstiles/cardtype.html)このコードを読みやすくするための簡単な方法の1つは 'var form = document.forms [0];です。 ... if(form.cardName == ".."){... form.ccResult.value = "..." ...} ' - ハッピーコーディング。ちょっとしたロジックを "テスト"するには、コンソール/デバッガ/ jsbinを利用することを忘れないでください。 –

+0

あなたの 'if(... test())'行には3つの奇妙なことがあります:関数呼び出しの周りに括弧は必要なく、 'true'に対して明示的にテストする必要はありません([Joe's answer] /stackoverflow.com/questions/4912094/credit-card-validation-with-regexp-using-test/4912134#4912134))、あなたのコードフォーマットを変更する前に(あなたが気にしないことを願って) '{'は同じ行、すなわちコメントの一部にその最後のコードは、少なくともコピー&ペーストエラーではない場合、コードが機能しなくなる可能性があります。 –

答えて

1

このコードは機能します。参照 - http://jsbin.com/aqowa3

を参照してください、コード+ HTMLを表示するには - http://jsbin.com/aqowa3/edit

あなたのhtmlがあなたのjsと一致していると、DOMの準備ができた後、あなたの関数を呼び出していることを確認していることを確認してください。

if(document.forms[0].cardName.value == "American Express") 
{ 
    var cardProtocol = new RegExp("^3[47][0-9]{13}$"); //REGEX ENTRY HERE <------ 
    if(cardProtocol.test(document.forms[0].cardNumber.value)) { 
     document.forms[0].ccResult.value = "Valid credit card number"; 
    } else{ 
     document.forms[0].ccResult.value = "Invalid credit card number"; 
    } 
} 
1

JSBinの@ joe-haninkの答えが正しいと思われます。 とにかく、私はiOS開発をやっています。私はクレジットカードの検証も必要でした。そのための正しい正規表現の検索では、私は次のリンクを見つけながら は:

そこでCredit Card Validation RegEx

は、私は、次の接続正規表現を見つけた、とiOSで正常にそれを使用し、Objective-Cの方法:

^(?:4[0-9]{12}(?:[0-9]{3})?   # Visa 
| 5[1-5][0-9]{14}     # MasterCard 
| 3[47][0-9]{13}     # American Express 
| 3(?:0[0-5]|[68][0-9])[0-9]{11} # Diners Club 
| 6(?:011|5[0-9]{2})[0-9]{12}  # Discover 
| (?:2131|1800|35\d{3})\d{11}  # JCB 
)$ 

それは魅力のように機能します!
これは皆さんにとって参考になると思います!
おはよう!

関連する問題