【问题标题】:How to validate phone field?如何验证电话字段?
【发布时间】:2017-06-13 05:44:21
【问题描述】:
如何验证以下格式的电话字段:
(999) 999-9999
我在下面尝试过,但没有用。
if(array_key_exists('phone', $values) && $values['phone'] != '')
{
if(!preg_match('/^[0-9]{3}-[0-9]{3}-[0-9]{4}$/', $values['phone']))
{
$form_state->setErrorByName('phone', t('Please enter a valid phone number.'));
}
}
【问题讨论】:
标签:
php
regex
validation
preg-match
【解决方案1】:
你几乎做到了:{3} 应该量化 [0-9] 并且应该添加文字括号并用反斜杠转义:
if(array_key_exists('phone', $values) && !empty($values['phone']))
{
if(!preg_match('/\A\([0-9]{3}\) [0-9]{3}-[0-9]{4}\z/', $values['phone']))
{
$form_state->setErrorByName('phone', t('Please enter a valid phone number.'));
}
}
我还建议使用始终匹配字符串开头/结尾的 !empty($values['phone']) 和 \A / \z 锚点。
见regex demo:
-
\A - 字符串锚的明确开始
-
\( - 一个左括号
-
[0-9]{3} - 3 位数
-
\) - 右括号
-
- 一个空格
-
[0-9]{3} - 3 位数
-
- - 一个连字符
-
[0-9]{4} - 4 位数字
-
\z - 字符串的最后。