为什么ValidForm会忽略我的验证表达式?

时间:2014-01-15 03:45:39

标签: javascript php regex validform

如果在表单字段中输入1到11个字符之间的任何内容,则下面的代码会正确阻止提交表单。

但是,输入任何类型的12个字符后,表单字段将通过验证。

  $objGroup->addField('phone', 'Location Phone', VFORM_CUSTOM,
    array(
      'required' => false,
      'validation' => '/^\d{3}-\d{3}-\d{4}$/',
      'minLength' => 12,
      'maxLength' => 12
    ),
    array(
      'type' => 'Location Phone not entered correctly',
      'minLength' => 'Location Phone must be entered like ###-###-####'
    ),
    array(
      'hint' => '###-###-####',
      'tip' => 'Enter your phone number.',
      'default' => $GLOBALS['phone']
    )
  );

只要在表单字段中输入内容,我只需要允许值字符串为999-999-9999。我的代码有什么不对?

无法提交包含11个字符的表单字段条目(请注意红色的错误消息):

enter image description here

带有12个字符的表单字段条目,其中最后一个字符不是数字(观察没有错误消息红色)表格可以提交:

enter image description here

除了VFB文档

#### Custom field types
* `VFORM_CUSTOM`
    This generates a text input field with a custom validation regular expression 

* `VFORM_CUSTOM_TEXT`
    This generates a textarea input field with a custom validation regular expression

##### Example - Validating a social security number
    $objSocialSecurity = $objForm->addField(
        "socialsecurity", 
        "Your social security number",
        VFORM_CUSTOM,
        array( 
            "validation" => "/^\d{3}-\d{2}-\d{4}$/"
        ),
        array(
            "type" => "Invalid Social Security number"
        )
    );

我的试用版&错误测试:

  1. 从我发现的文档中逐字复制并粘贴了示例验证代码段。它没有成功。我怀疑"validation""type"之间存在某种脱节。
  2. 将单引号的使用更改为双引号,如文档中所示。它没有成功。
  3. 在各自的数组()中重新排列"validation""type"的位置。它没有成功。
  4. "type"更改为"validation"。它没有成功。
  5. 删除minLength和maxLength的使用以查看是否存在冲突。它没有成功。
  6. 制作了所需的字段,以查看验证仅在需要表单字段时才有效。它没有成功。
  7. 我已经用尽了我的测试......

1 个答案:

答案 0 :(得分:1)

尝试从正则表达式中删除^$字符:

/\d{3}-\d{3}-\d{4}/

minLength和maxLength为12时,^$变得多余,并且经常会导致验证问题。