2014-02-26 79 views
0

我拿到這個劇本腳本來驗證生日

$("#SocialSecurityNumber").attr("placeholder","YYYY-MM-DD-XXXX").blur(function() { 
     var str = $('#SocialSecurityNumber').val(); 
     var res = /^([1-2]\d{3})\-([0-1][1-9])\-([0-3][0-9])\-([0-9]{4})$/.exec(str); 
     var todays_date = new Date(); 
     var birth_date = new Date(res[1], res[2], res[3]); 

     if (todays_date - birth_date > 565633905872) { 
      $("#btn-activation").removeAttr('disabled'); 
      $("#SocialSecurityNumber").removeClass("input-validation-error"); 
     } else { 
      $("#SocialSecurityNumber").attr("placeholder","Please enter date of birth as YYYY-MM-DD-XXXX").addClass("input-validation-error"); 
      $("#btn-activation").attr("disabled", "disabled"); 
     } 
    }); 

}); 

這將驗證年齡,從輸入#SocialSecurityNumber 然而,輸入文字或當其他jibberish它沒有在所有的驗證,我得到JS錯誤

Uncaught TypeError: Cannot read property '1' of null 

可以幫助我如何添加,所以這個腳本也驗證不正確的字符嗎? (當正則表達式不匹配時)

+0

如果RegEx不匹配,那麼'res'將爲空...因此調用索引時總會失敗。在執行'res [1]'之前,你需要測試'res!= null'(或類似的) – freefaller

回答

1

根據我的評論,在JavaScript中,如果RegEx不匹配,那麼結果是null

因此,您正試圖索引null變量...這就是您看到錯誤的原因。

您需要檢查一個null值,像這樣的東西......

var res = /^([1-2]\d{3})\-([0-1][1-9])\-([0-3][0-9])\-([0-9]{4})$/.exec(str); 
var todays_date = new Date(); 
var birth_date = null; 
if (res != null) { 
    birth_date = new Date(res[1], res[2], res[3]); 
} 

if (birth_date == null || todays_date - birth_date > 565633905872) { 
    ... 

你需要理清自己確切的邏輯,但希望這給你什麼事的想法錯誤。

0

如果沒有匹配,則res將是null。所以你可以做的一件事是:

if(res.length==3) 
var birth_date = new Date(res[1], res[2], res[3]); 

這證實你只得到正確數量的匹配。