如果在表单字段中输入 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 个字符的表单字段输入(请注意红色错误消息)表单:
可以提交包含 12 个字符的表单字段条目,其中最后一个字符不是数字(观察没有红色错误消息)表单:
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"
)
);
我的尝试和错误测试:
- 从我找到的文档中逐字复制并粘贴示例验证片段。它并没有使它发挥作用。我怀疑
“validation”
和“type”
之间存在某种脱节。 - 将我对单引号的使用更改为双引号,如文档中所示。它并没有使它发挥作用。
- 重新排序了
“validation”
和“type”
在各自数组中的位置。它并没有使它发挥作用。 - 将
“类型”
更改为“验证”
。它并没有使它发挥作用。 - 删除了使用 minLength 和 maxLength 来查看是否存在冲突。它并没有使它发挥作用。
- 设置了必填字段,以查看验证是否仅在需要表单字段时才起作用。它并没有使它发挥作用。
- 我已经用尽了我的 t&e 测试...
最佳答案
尝试从正则表达式中删除 ^
和 $
字符:
/\d{3}-\d{3}-\d{4}/
当 minLength 和 maxLength 为 12 时,^
和 $
变得多余,并且通常会自行导致验证问题。
关于javascript - 为什么 ValidForm 忽略我的验证表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21128742/