Javascript 正在跳过JS正则表达式?

Javascript 正在跳过JS正则表达式?,javascript,regex,Javascript,Regex,我正在尝试验证主题的字段,稍后我将在使用mail()发送电子邮件时发布并使用该字段 到目前为止,我已经完成了正则表达式的编写,编辑了一段已有的Javascript,其中包含一位前实习生提供的字段验证,在HTML输入字段中添加了一个模式,并在下一页编写了一个小型服务器端PHP/正则表达式验证。乍一看,它似乎工作得很好,但当我删除inputfield中的模式(由使用Chrome的inspect元素完成)时,Javascript检查被完全跳过,我的表单被发布。仅由于服务器端检查,我返回到上一页 以下是

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

到目前为止,我已经完成了正则表达式的编写,编辑了一段已有的Javascript,其中包含一位前实习生提供的字段验证,在HTML输入字段中添加了一个模式,并在下一页编写了一个小型服务器端PHP/正则表达式验证。乍一看,它似乎工作得很好,但当我删除inputfield中的模式(由使用Chrome的inspect元素完成)时,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>

if($.browser.msie | | navigator.userAgent.indexOf('Safari')!=-1&&navigator.userAgent.indexOf('Chrome')=-1)
{
jQuery(函数(){
$(“#提交”)。单击(函数(){
$(“.error”).hide();
var hasError=false;
var OnderVerpreg=/^[a-zA-Z0-9}{4,20}[^\/'”;]*$/;
var onderVerpVal=$(“#主题”).val();
如果(OnDerVerval=='')
{
$(“#subject”).html(“
Vul een onderwerp in.”); var hasError=true; } 否则,如果(!OnDerVerpreg.test(OnDerVerpVal)) { $(“#主题”).html(“
Onderwerp bevat gefilterde karakters.”); var hasError=true; } if(hasError==true) 返回false; }); }); }
HTML

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

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

编辑:

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

正如Loamhoof已经说过的,您的JS代码没有在chrome中执行

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

模式
属性与JavaScript无关

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


因此,这里的JavaScript代码实际上只是Internet Explorer的后备解决方案,它们还没有实现HTML5表单字段验证。(也许IE 10可以,但我研究了你的答案,得出结论,它确实在IE中起作用。我知道Javascript可以被禁用,模式可以通过编辑客户端手动删除,这样服务器端的检查就开始了。你认为忽略JS+模式会有什么坏处吗?所有ca都会进行检查ses(我假设)。因此,对于任何普通用户来说,这里没有问题。对于那些只想干扰你的应用程序的人来说,这里有服务器端检查。JS检查(和这里的HTML)只是对用户的一种礼貌。好的,足够公平。至少现在我知道我还需要查看其他页面上的服务器端检查。我会接受你的回答:)