2016-03-28 39 views
1

javascriptには、HTMLフォームから13桁のID番号を含むvarがあります。このID番号の最初の6桁は、フォーマットYYMMDDの生年月日です。Regexを使って3桁の2桁のグループを抽出します。

入力例:94092; ここで、94は年、09は月、20は日です。

は私がそのようなことを、この誕生日を確認する必要があります:31 - 日が1の間にある

  • 12 -

    1. 年の間にある(包括的)1920から1の間で1997
    2. 月です

    これらのいずれかがfalseの場合、私の関数はfalseを返す必要があります。

    これは、これまでのところ、私の関数である。

    function validateID(idNum, errors) { 
     
        if (!/^\d{13}$/.test(idNum.value)) { 
     
        errors.innerHTML = "ID Number must be 13 numerical digits"; 
     
        return false; 
     
        } 
     
        var year = idNum.value.substring(0, 3); 
     
        var month = idNum.value.substring(3, 5); 
     
        var day = idNum.value.substring(5, 7); 
     
    
     
        if (year > 97 || year < 20) { 
     
        errors.innerHTML = "Year is outside of range (1920 - 1997)"; 
     
        return false; 
     
        } else if (month > 12 || month < 1) { 
     
        errors.innerHTML = "Month is outside of range (1 - 12)"; 
     
        return false; 
     
        } else if (day > 31 || day < 1) { 
     
        errors.innerHTML = "Day is outside of range (1 - 31)"; 
     
        return false; 
     
        } 
     
    }

    パラメータ:IDNUMは、HTMLのフォーム入力、text型です。そして、エラーはHTMLにエラーを出力するdivです。

    サブストリングが明らかに私のために働いていない、誰かがRegexを使用して別の方法を提案することができます。ありがとう!

  • +0

    あなたは>とint型と文字列を比較したり、<ことができません - あなたはあなたの年でのparseIntを使用する必要があり、月と日が – abagshaw

    +0

    値は....完全に素晴らしいのparseInt関数 –

    答えて

    3

    部分文字列のパラメータが間違っています。 endパラメーターは0ベースであり、1ベースではありません。また、文字列を数値に変換するには、parseInt()を使用する必要があります。

    var year = parseInt(idNum.value.substring(0, 2), 10); 
    var month = parseInt(idNum.value.substring(2, 4), 10); 
    var day = parseInt(idNum.value.substring(4, 6), 10); 
    

    また、正規表現マッチングを実行しているときにそれらを抽出することもできます。

    if (!(match = /^(\d{2})(\d{2})(\d{2})\d{7}$/.test(idNum.value)) { 
        errors.innerHTML = "ID Number must be 13 numerical digits"; 
        return false; 
    } 
    var year = parseInt(match[1], 10); 
    var month = parseInt(match[2], 10); 
    var day = parseInt(match[3], 10); 
    
    +0

    忘れ、忘れてしまいましたparseInt関数...それは私が探していた正規表現の構文ですが、あなたの部分文字列の方が簡単です。 –

    関連する問題