正在跳过JS正则表达式?

时间:2013-04-11 09:42:19

标签: javascript regex

我正在尝试验证某个主题的字段,稍后我会发送并使用邮件发送电子邮件()。

到目前为止,我已经完成了正则表达式,使用前实习生的字段验证编辑了现有的Javascript,在我的HTML输入字段中添加了一个模式,并在下一个编写了一个小的服务器端PHP / regex验证页。它看起来工作得很好,但是当我在inputfield中删除模式时(由Chrome检查元素完成),Javascript检查完全被跳过,我的表单被发布了。仅由于服务器端检查,我才返回上一页。

以下是我使用的一些代码:

的Javascript

<script type="text/javascript">
    if($.browser.msie || navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1)
    {
        jQuery(function(){
            $("#submit").click(function(){
            $(".error").hide();

            var hasError = false;
            var onderwerpReg = /^[a-zA-Z0-9_]{4,20}[^\/'"<>;]*$/;
            var onderwerpVal = $("#subject").val();

            if (onderwerpVal == '')
            {
                $("#subject").html('<br/><span class="error">Vul een onderwerp in.</span>');
                var hasError = true;
            }
            else if (!onderwerpReg.test(onderwerpVal))
            {
                $("#subject").html('<br/><span class="error">Onderwerp bevat gefilterde karakters.</span>');
                var hasError = true;
            }
            if (hasError == true)
                return false;
            });
        });
    }
</script>

HTML

<input type="text" id="subject" name="subject" size="30" placeholder="Onderwerp" required aria-required="true" pattern="^[a-zA-Z0-9_]{4,20}[^\/'&quot;<>;]*$"/>

我的问题是:我的Javascript被跳过怎么可能?我没有正确加载吗? Javascript是否错误?另一方面,它适用于我网站上的其他表单,所以我想我会以同样的方式坚持验证字段。

2 个答案:

答案 0 :(得分:1)

我可能错了,但...... if($.browser.msie || navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1)。只有在您使用IE或Safari时才会进行检查 我不确定,但可能是浏览器阻止发送带有错误的表单(模式不匹配),所以他这样做只检查不支持模式属性的浏览器(它不是很多无论如何,用户可以做任何他想跳过JS中的验证的问题。再一次,我不确定。

修改
关于发送带有错误的表单的部分。我已经测试过,你只能在匹配模式时发送它(或者是一个空字符串,但是有必要的属性)。

答案 1 :(得分:0)

正如Loamhoof所说,你的JS代码不是用chrome执行的。

  

但是当我删除inputfield中的模式(由Chrome检查元素完成)时,Javascript检查完全被跳过

pattern属性与您的JavaScript无关。

HTML5规范的一部分是让浏览器本身直接验证表单字段,而不需要任何脚本。

因此,您的JavaScript代码实际上只是Internet Explorer的后备解决方案,它尚未实现HTML5表单字段验证。 (也许IE 10可以,但&lt; = 9肯定不是。)

关于你的问题,如果通过JS进行验证是否被忽视是否有害 - 不,如果你验证你的数据服务器端(你绝对总是 ),实际上并不“有害”去做)。进行客户端验证只是用户友好性的问题,因为它使用户无法提交未正确填写的表单,只能在下一页上获取服务器端生成的错误消息。是否要保持此脚本在用户使用IE时为用户提供这种额外的舒适功能,或者如果您只是在现代浏览器中使用HTML5方式,那么这取决于您。