JS正则表达式被跳过?
我试图验证一个主题的字段,我将在发送邮件时使用邮件()发送邮件并使用它。JS正则表达式被跳过?
到目前为止,我已经完成了正则表达式,编辑了一个现有的Javascript片段,并使用前实习生的字段验证功能,在我的HTML输入字段中添加了一个模式,并编写了一个小型的服务器端PHP/regex验证下一页。它看起来在第一眼看起来很好,但是当我删除我的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>
HTML
<input type="text" id="subject" name="subject" size="30" placeholder="Onderwerp" required aria-required="true" pattern="^[a-zA-Z0-9_]{4,20}[^\/'"<>;]*$"/>
我的问题是:怎么可能,我的一段JavaScript代码是被跳过?我没有正确加载它吗? Javascript明显错了吗?另一方面,它在我网站上的其他表格上工作,所以我认为我会坚持以同样的方式验证字段。
我可能是错的,但... if($.browser.msie || navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1)
。只有在使用IE或Safari时才能完成检查。
我不知道,但它可能是浏览器发送一个形式错误(模式不匹配)阻止,所以他这样做是为了只检查不支持的格局属性浏览器(它不是很多问题无论如何用户可以做任何他想跳过JS中的验证)。再一次,我不确定这一点。
编辑:
关于使用错误发送形式的一部分。我测试过了,如果它匹配模式(或者是一个空字符串,但是有必要的属性),则只能发送它。
正如Loamhoof已经说了,你的JS代码在Chrome中执行。
但是当我删除我的inputfield模式(通过检查与铬元素来完成的),JavaScript的检查也完全跳过
的pattern
属性无关,与你的JavaScript。
它是HTML5规范具有由浏览器本身直接验证表单字段的一部分,而没有任何脚本。
因此,您的JavaScript代码实际上只是Internet Explorers的后备解决方案,它尚未实现HTML5表单字段验证。 (也许IE 10的确如此,但是< = 9肯定不是。)
至于你的问题,如果通过JS进行验证被忽略,是否会有害 - 如果你验证你的数据服务器没有,实际上“有害” - (你绝对总是有要做)。进行客户端验证只是用户友好性的问题,因为它可以避免用户提交未正确填写表单的麻烦,只能在下一页获取服务器端生成的错误消息。无论您希望保持此脚本在用户使用IE时为用户提供这种额外的舒适功能,还是只使用现代浏览器中的HTML5方式,您都可以使用该脚本,这取决于您。
我看着你的答案,得出的结论是,它确实在IE中工作。我知道Javascript可以被禁用,并且可以通过编辑客户端手动删除该模式,这样当服务器端检查启动时。您认为如果忽略JS +模式会有什么坏处? – 2013-04-11 09:59:05
检查的所有情况下(我假设)。所以,对于任何普通用户来说,这里没有问题。对于只想惹你的应用的人来说,有服务器端检查。 JS检查(和HTML在这里)仅仅是对用户的礼貌。 – Loamhoof 2013-04-11 10:00:52
好吧,够公平的。至少现在我知道我需要查看其他页面上的服务器端检查。我会接受你的回答:) – 2013-04-11 10:02:03