0

我正在尝试验证一个主题的字段,稍后我将在使用 mail() 发送电子邮件时发布并使用该主题。

到目前为止,我已经完成了正则表达式,使用前实习生的字段验证编辑了现有的一段 Javascript,在我的 HTML 输入字段中添加了一个模式,并在下一页上编写了一个小的服务器端 PHP/正则表达式验证。乍一看似乎工作正常,但是当我删除输入字段中的模式(通过使用 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 是完全错误的吗?另一方面,它适用于我网站上的其他表单,所以我想我会以同样的方式坚持验证字段。

4

2 回答 2

1

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

编辑:
关于发送错误表单的部分。我已经测试过,只有当它与模式匹配时才能发送它(或者是一个空字符串,但有所需的属性)。

于 2013-04-11T09:51:41.620 回答
0

正如 Loamhoof 已经说过的,您的 JS 代码不是在 chrome 中执行的。

但是当我删除输入字段中的模式(通过使用 Chrome 的检查元素完成)时,完全跳过了 Javascript 检查

pattern属性与您的 JavaScript 无关。

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

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

至于您的问题,如果忽略通过 JS 进行的验证是否有害 - 不,如果您在服务器端验证数据(您绝对总是必须这样做),实际上不会“有害”。拥有客户端验证只是用户友好性的问题,因为它使用户免去了提交尚未正确填写的表单的麻烦,只是在下一页上获得服务器端生成的错误消息。您是否希望保留此脚本以便在用户使用 IE 时为他们提供这种额外的舒适功能,或者您是否可以接受它仅在现代浏览器中以 HTML5 方式工作,这取决于您。

于 2013-04-11T10:06:27.883 回答