Javascript 正在跳过JS正则表达式?
我正在尝试验证主题的字段,稍后我将在使用mail()发送电子邮件时发布并使用该字段 到目前为止,我已经完成了正则表达式的编写,编辑了一段已有的Javascript,其中包含一位前实习生提供的字段验证,在HTML输入字段中添加了一个模式,并在下一页编写了一个小型服务器端PHP/正则表达式验证。乍一看,它似乎工作得很好,但当我删除inputfield中的模式(由使用Chrome的inspect元素完成)时,Javascript检查被完全跳过,我的表单被发布。仅由于服务器端检查,我返回到上一页 以下是我使用的一些代码: JavascriptJavascript 正在跳过JS正则表达式?,javascript,regex,Javascript,Regex,我正在尝试验证主题的字段,稍后我将在使用mail()发送电子邮件时发布并使用该字段 到目前为止,我已经完成了正则表达式的编写,编辑了一段已有的Javascript,其中包含一位前实习生提供的字段验证,在HTML输入字段中添加了一个模式,并在下一页编写了一个小型服务器端PHP/正则表达式验证。乍一看,它似乎工作得很好,但当我删除inputfield中的模式(由使用Chrome的inspect元素完成)时,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}[^\/'"<>;]*$"/>
我可能错了,但是…如果($.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)只是对用户的一种礼貌。好的,足够公平。至少现在我知道我还需要查看其他页面上的服务器端检查。我会接受你的回答:)