【问题标题】:jQuery Validation : Regex for input name valuejQuery Validation:输入名称值的正则表达式
【发布时间】:2018-05-28 14:00:24
【问题描述】:

我正在尝试为表单添加验证

$('#reportForm').validate({
    rules: {
      'report[invoices_attributes][0][invoice_type]' :
  {
    required: true,
    'report[invoices_attributes][0][invoice_type]':true

  }
  }
  });

reportForm 是我的表单的 id。我所有的输入字段名称值都将类似于'report[invoices_attributes][indexnr]...'(因为我使用的是嵌套属性,并且可以有 0 个或多个元素)

为此,我想将所有输入名称值与正则表达式匹配:/^report\[invoices_attributes\]\[[0-9]\](.*)/

如何将其添加到输入名称值的规则字段(当前为'report[invoices_attributes][0][invoice_type]'),以匹配我感兴趣的所有字段?

【问题讨论】:

  • 你不能那样做。在.validate()rules 对象内声明规则时,一次只能声明一个规则字段。您也不能有一个布局,其中所有正在验证的字段共享相同的 name 属性。每个字段必须有一个唯一的name。或者复选框/单选按钮的单个“分组”可以共享name。这在文档中都有详细说明。
  • 并且在您的场景中每个name 下只能是规则列表,而不是更多字段名称。

标签: javascript jquery ruby-on-rails jquery-validate


【解决方案1】:

首先,我会entirely avoid Allman style code formatting in JavaScript


.validate()rules 对象内声明规则时,一次只能声明一个规则字段...

$('#reportForm').validate({
    rules: {
        'report[invoices_attributes][0][invoice_type]': {
            required: true,
        },
        'report[invoices_attributes][1][invoice_type]': {
            required: true,
        },
        'report[invoices_attributes][2][invoice_type]': {
            required: true,
        },
        // etc.
    }
});

如果您想在多个字段上声明,请使用 .rules() 方法以及 jQuery .each() 和任何适合您的组的 jQuery 选择器。

$('.myfields').each(function() {
    $(this).rules('add', {
        required: true
    });
});

您也不能有一个布局,其中所有正在验证的字段共享相同的name 属性。 每个字段必须有一个唯一的name 或者复选框/单选按钮的单个“分组”可以共享一个name没有解决办法。

如果您只需要可以简单地通过布尔值声明的基本规则,那么您可以使用内联属性而不是.rules() 方法或rules 对象。

<input name="foo" required="required" ....

或者按班级...

<input name="foo" class="required" ....

更多信息:https://stackoverflow.com/a/9056425/594235

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 2010-09-21
    • 1970-01-01
    • 2012-12-19
    • 2011-05-11
    • 2019-08-09
    • 2023-04-09
    相关资源
    最近更新 更多