如何验证以下格式的电话字段:
(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.'));
}
}
答案 0 :(得分:2)
你几乎做到了:{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
- 字符串的最后一部分。