2014-05-20 48 views
0

當我將它插入文本字段中的模式屬性時,它不接受應該被接受的輸入。然而,它被接受並且被測試here正則表達式在文本字段的模式屬性上不起作用

這裏是我的1900年至2099年連續兩年檢查的正則表達式。 e.g 2001-2002

pattern="(^((?=\d{4}-\d{4})(?=[0-9]{4}$|1999-2000|([0-9]{2})[0-8]9-\1[1-9]0|([0-9]{3})[0-8]-\2[1-9])(?:19|20)(?=[^-]*$|([0-9]).*\3.$|09.*10$|19.*20$|29.*30$|39.*40$|49.*50$|59.*60$|69.*70$|79.*80$|89.*90$|99.*00$)[0-9](?=[^-]*$|0.*1$|1.*2$|2.*3$|3.*4$|4.*5$|5.*6$|6.*7$|7.*8$|8.*9$|9.*0$)[0-9](?:-[0-9]{4})?)$)" 
+3

這與HTML有什麼關係?您使用的是哪種語言的RegExp,有可能您的RegExp引擎不支持您使用的功能。 – scragar

+1

您可能想要使用正則表達式來檢測您有兩個相鄰的數字,但您應該真正解析它們以執行任何比較。 – adamdc78

回答

0

我解決了這個問題,我用這個checkYear通過解析它來檢查的一年。但即使它警報和工作,用戶仍然可以通過輸入提交它,所以我添加了功能check2和頁面的每個加載,我調用該函數來檢查輸入是否有效。如果是這樣,那麼啓用的提交按鈕,如果沒有,那麼禁用

<script> 
     function checkYear() { //checks year 
      var year = document.getElementById('hpw').value.split('-'); 
      if((parseInt(year[0])+1==parseInt(year[1]))&&(parseInt(year[0])>=1900)&&(parseInt(year[1])<=2099)){ 
       alert('Great!'); 
       return 1; 
      } 
      else{ 
       alert('Year should be consecutive (e.g 2011-2012)'); 
       document.getElementById('hpw').select(); 
       return 0; 
      } 
     } 

     function check2() { //disables button if checkYear is not met so that it will prohibit the submission of the form if it is failed - acts like required plus pattern attribute of html 
      if(checkYear()==0){ 
       //alert('fail2!'); 
       document.getElementById('submitbutton').disabled = true; 
      } 
      else{ 
       //alert('Great2!'); 
       document.getElementById('submitbutton').disabled = false; 
      } 
     } 
     window.onload = function() { //every load, check the fields to be checked 
      check2(); 
     } 
    </script>