【问题标题】:How can I validate a full name using addMethod in jQuery Validator?如何在 jQuery Validator 中使用 addMethod 验证全名?
【发布时间】:2019-01-21 21:22:13
【问题描述】:

我目前正在使用 jQuery Validate 来验证我的表单数据,并且我正在对多个字段使用正则表达式来使用模式检查有效性。但是,即使在通过 addMethod 应用我的新验证方法后,表单仍然允许人们在全名字段中仅使用名字来提交表单。

对于我的全名字段,我已经通过在字段上测试它来验证我的正则表达式是否有效,而无需在我的表单上使用 novalidate。

正则表达式:^([a-zA-Z]{2,}\s[a-zA-z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)

添加方法尝试

jQuery.validator.addMethod("fullname", function(value, element) {
    return this.optional(element) || /^([a-zA-Z]{2,}\s[a-zA-z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)/.test(value);
}, 'Please enter your full name.');
<input id="full-name" name="Full_Name" type="text" class="form-control" placeholder="John Doe" required>

如果输入的是单个姓名(例如 John)而不是全名,我的正则表达式应将其标记为无效并请求此人的全名。

【问题讨论】:

  • 您的.validate() 方法在哪里?你的form 在哪里?如果不显示这一点,没有人知道您是否正确调用了新规则。
  • 我实际上并不知道.validate() 方法,因此是我的问题。现在都修好了。谢谢大家!

标签: javascript jquery regex jquery-validate


【解决方案1】:

你需要做两件事:

  • 首先,如果验证通过则返回true,否则返回false

  • 其次,其实是调用.validate()中新增的方法。

这可以在下面看到:

jQuery.validator.addMethod("fullname", function(value, element) {
  if (/^([a-zA-Z]{2,}\s[a-zA-z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)/.test(value)) {
    return true;
  } else {
    return false;
  };
}, 'Please enter your full name.');

$("#sample").validate({
  rules: {
    Full_Name: { // Corresponds to the `name` attribute
      required: true,
      fullname: true // Attaches the new method to the element
    }
  },
  submitHandler: function(form, e) {
    e.preventDefault();
    console.log('The form is valid and would have been submitted successfully');
  },
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js"></script>

<form id="sample">
  <input id="full-name" name="Full_Name" type="text" class="form-control" placeholder="John Doe" required>
  <button id="submit">Submit</button>
</form>

【讨论】:

  • .addMethod() 函数中的逻辑绝对没有问题。 return this.optional(element) || /^([a-zA-Z]{2,}\s[a-zA-z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)/.test(value) 确实会给出 truefalse 响应,并且正在使用与 here 方法类似的结构正确的函数。
  • 通过省略this.optional(element) 部分,即使required 规则为false,您也强制该字段为required。如果他在可选字段上使用您的方法版本,则永远不能将此字段留空。
  • 完美解决方案!我不敢相信我忘了调用我的新方法。谢谢黑曜石!
  • @Obsidian 在另一个站点上遇到了完全相同的问题,除了现在我已经实现了相同的 addMethod 并且 调用了该方法,并且所有站点都在验证是否字段是否填写。我已经将代码与您发送的代码进行了比较,它是相同的。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多