电子邮件的jquery验证允许空白

时间:2014-11-14 21:41:03

标签: jquery ajax validation

我有联系表格。提交时,它使用AJAX加载" /forms/contact_received.php"给我发电子邮件&将用户的联系信息添加到数据库。数据库中10%的条目(以及相关的电子邮件)都没有电子邮件地址。

我似乎无法复制这个问题。有一段时间,我把表单发给我用户代理,希望他们都有相同的浏览器,但它是一个横截面,一些旅行,一些mozilla,一些IE,一些移动,一些桌面。此外,空白电子邮件提交似乎也不是恶意的,这些都是来自实际人类的合法问题。

我的脚本看起来像这样:

<script type="text/javascript">
function checkForm() {
  hideAllErrors();
  var formIsValid =
    showErrorAndFocusIf('FieldData0', isEmpty, 'nameError')
    && showErrorAndFocusIf('FieldData2', isEmpty, 'emailError')
    && showErrorAndFocusIf('FieldData2', isAnInvalidEmail, 'emailError2')
    && showErrorAndFocusIf('FieldData1', isEmpty, 'questionError');
  return formIsValid;
}
function showErrorAndFocusIf(fieldId, predicate, errorId) {
  var field = document.getElementById(fieldId);
  if (predicate(field)) {
    document.getElementById(errorId).style.display = 'inline';
    if (field.select) {
      field.select();
    }
    field.focus();
    return false;
  }
  return true;
}
function isEmpty(field) {
  return field.value == '';
}
function isAnInvalidEmail(field) {
  var email = field.value;
  var ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";
  for(i = 0; i < email.length; i++){
    if(ok.indexOf(email.charAt(i)) < 0) {
      return true;
    }
  }
  re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
  re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
  return re.test(email) || !re_two.test(email);
}
function hideAllErrors() {
  document.getElementById("nameError").style.display = "none"
  document.getElementById("emailError").style.display = "none"
  document.getElementById("emailError2").style.display = "none"
  document.getElementById("questionError").style.display = "none"
}
</script>

和我的HTML看起来像这样:

<style>
.error{display:inline;margin:0;}
</style>

<form id="contact" name="contact" action="">
    <b>Name</b>
    <input class="valid" name="name" value="" maxlength="100" size="30" style="display:block;" type="text">

    <b>Email</b> (will not be published)
    <input class="error" name="email" value="" maxlength="100" size="30" style="display:block;" type="email">
    <label class="error" generated="true" for="email">Please enter a valid email address</label>

    <b>Question</b>
    <textarea class="error" name="message" cols="50" rows="5" style="display:block;"></textarea>
    <label class="error" generated="true" for="message">Please enter your message in the box above</label>
    <input name="page" value="[URL]" type="hidden">
    <input class="btn" value="Contact Us" name="Submit" type="submit">
</form>

我的验证可能失败的可能情况是什么?就像我说的那样,验证对我来说很好,我无法弄清楚它是如何被绕过的。

1 个答案:

答案 0 :(得分:0)

如果您的检查仅在客户端完成,那么绕过它们是微不足道的。

例如,任何禁用了js的用户都不会收到任何警告,并会成功发布您的表单。

您还必须在服务器端检查值。

编辑:

最好的方法是始终在服务器端执行所有检查,返回解释问题的页面。

然后,使用javascript来改善用户体验,如果它被禁用,则回退到旧方法。