JavaScript打破文本框

时间:2012-07-06 06:46:09

标签: javascript html regex

我有一个控件,它是一个日期选择器,使用HTML5的“pattern”属性和正则表达式进行验证。它工作正常。

<input type='text' class='date-pick' name='breakEndIE' size='8' placeholder='01-03-2011' style='max-width:100px' pattern='^(((0[1-9]|[12]\d|3[01])-(0[13578]|1[02])-                ((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)-(0[13456789]|1[012])-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])-02-((19|[2-9]\d)\d{2}))|(29-02-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$' readonly='readonly' required />

然而,当我使用document.write()将其放入脚本时,它会停止工作。 (模式始终认为日期格式中存在错误)

<script>
            var ifFFOCHR = false;
            if (navigator.appVersion.indexOf("MSIE") > -1) ifFFOCHR = false;
            else if (navigator.appVersion.indexOf("Chrome") > -1) ifFFOCHR = true;
            else if (navigator.appVersion.indexOf("Safari") > -1) ifFFOCHR = false;
            else ifFFOCHR = true;

            if (ifFFOCHR == true) 
                {
                    //FIREFOX/CHROME/OPERA CODE HERE
                    document.write("<input type='text' class='date-pick' name='breakEnd' size='8' placeholder='01-03-2011' style='max-width:100px' pattern='^(((0[1-9]|[12]\d|3[01])-(0[13578]|1[02])-((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)-(0[13456789]|1[012])-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])-02-((19|[2-9]\d)\d{2}))|(29-02-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$' required />");
                }
            else 
                {
                    //IE/SAFARI CODE HERE
                    document.write("<input type='text' class='date-pick' name='breakEndIE' size='8' placeholder='01-03-2011' style='max-width:100px' pattern='^(((0[1-9]|[12]\d|3[01])-(0[13578]|1[02])-                ((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)-(0[13456789]|1[012])-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])-02-((19|[2-9]\d)\d{2}))|(29-02-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$' readonly='readonly' required />");
                }
            </script>

我不知道为什么会这样。我已经尝试过多次复制并粘贴到document.write()中。它在它之外工作,但不在其中。我试过让朋友去做。 我们在另一个脚本中尝试了它并且它工作正常,它只是在这个脚本内部它会中断。

请帮忙。

仅供参考:脚本是在IE&amp ;;内部显示某些代码。 Safari和Firefox,Opera和Chrome中的不同代码显示。

2 个答案:

答案 0 :(得分:3)

一个很大的可能性是你有转义字符,例如你的正则表达式字符串中的\d。当内联添加模式属性时,这些处理文字字符,但当放置在javascript字符串中时,\被视为具有不同的含义。

因为您现在已将该表达式包装在字符串中,您可能需要转义\字符,例如\\d

尝试将字符串写入console.log或调用alert(),以便您可以直观地了解JavaScript对字符串的解释。

答案 1 :(得分:0)

我不是javascript程序员但是如果我删除了标签readonly ='readonly'在MSIE8中正常运行。