我的PHP表单验证有点问题,我可以使用一些帮助。
我有一个可选字段,只有在用户填写时才应该验证,否则表格应该正常处理。以下是该领域的验证:
if (!preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) :
$errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes'));
endif;
可能很简单,但目前我无法理解如果该字段留空,如何绕过验证。有什么想法吗?
答案 0 :(得分:2)
if(!empty($your_field) && !preg_match(...))
PHP在测试正则表达式之前测试该字段是否为null。 如果该字段为空,PHP将跳转到下一条指令。
答案 1 :(得分:1)
将其余代码包装在其中,只有在$ start不为空时才会触发,
if (trim($start)) {
// put other code in here
}
答案 2 :(得分:0)
你有没有试过这样的事情:
if (!empty($_POST['field_name'])) {
if(!preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) :
$errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes'));
}
首先会查看该字段的状态,然后根据需要转到验证。
EDIT 对不起,刚刚意识到有一种最佳方式:
if(!empty($start) && !preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) :
$errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes'));
endif;
为什么!empty($start)
?因为它使用标准PHP函数来定义值是否存在。不是100%必需,但最佳做法是在确定值是否存在时使用empty()函数。
答案 3 :(得分:0)
假设您的表单数据存储在$start
:
if ($start && !preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", '$start')) :
$errors->add('submit_error', __('<strong>ERROR</strong>: The time is incorrect', 'appthemes'));
endif;