Regex不会在文本字段上处理模式属性

时间:2014-05-20 12:35:32

标签: html regex

当我将其插入文本字段中的pattern属性时,它不接受应该接受的输入。但是,它已被接受并经过测试here

这是我从1900年到2019年连续两年检查的正则表达式。例如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})?)$)"

1 个答案:

答案 0 :(得分: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>