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}[^\/'&quot;<>;]*$"/> 

我的问题是:怎么可能,我的一段JavaScript代码是被跳过?我没有正确加载它吗? Javascript明显错了吗?另一方面,它在我网站上的其他表格上工作,所以我认为我会坚持以同样的方式验证字段。

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

编辑:
关于使用错误发送形式的一部分。我测试过了,如果它匹配模式(或者是一个空字符串,但是有必要的属性),则只能发送它。

+0

我看着你的答案,得出的结论是,它确实在IE中工作。我知道Javascript可以被禁用,并且可以通过编辑客户端手动删除该模式,这样当服务器端检查启动时。您认为如果忽略JS +模式会有什么坏处? – 2013-04-11 09:59:05

+0

检查的所有情况下(我假设)。所以,对于任何普通用户来说,这里没有问题。对于只想惹你的应用的人来说,有服务器端检查。 JS检查(和HTML在这里)仅仅是对用户的礼貌。 – Loamhoof 2013-04-11 10:00:52

+0

好吧,够公平的。至少现在我知道我需要查看其他页面上的服务器端检查。我会接受你的回答:) – 2013-04-11 10:02:03

正如Loamhoof已经说了,你的JS代码在Chrome中执行。

但是当我删除我的inputfield模式(通过检查与铬元素来完成的),JavaScript的检查也完全跳过

pattern属性无关,与你的JavaScript。

它是HTML5规范具有由浏览器本身直接验证表单字段的一部分,而没有任何脚本。

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

至于你的问题,如果通过JS进行验证被忽略,是否会有害 - 如果你验证你的数据服务器没有,实际上“有害” - (你绝对总是要做)。进行客户端验证只是用户友好性的问题,因为它可以避免用户提交未正确填写表单的麻烦,只能在下一页获取服务器端生成的错误消息。无论您希望保持此脚本在用户使用IE时为用户提供这种额外的舒适功能,还是只使用现代浏览器中的HTML5方式,您都可以使用该脚本,这取决于您。