Что хороший путь состоит в том, чтобы проверить номера телефона, вводимые в codeigniter?
Это - мой первый раз, пишущий приложение, и я действительно не понимаю regex вообще.
Действительно ли легче иметь три поля ввода для номера телефона?
Вот классное регулярное выражение, которое я нашел в Интернете. Он проверяет число почти в любом американском формате и преобразует его в (xxx) xxx-xxxx. Я думаю, это здорово, потому что тогда люди могут ввести любой 10-значный номер телефона в США, используя любой формат, который они используют, и вы получите из него правильно отформатированный номер.
Вот вся функция, которую вы можете поместить в свой класс MY_form_validation. Я хотел, чтобы в моей форме были пустые поля, поэтому вам придется изменить ее, если вы хотите принудительно ввести значение.
function valid_phone_number_or_empty($value)
{
$value = trim($value);
if ($value == '') {
return TRUE;
}
else
{
if (preg_match('/^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/', $value))
{
return preg_replace('/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/', '($1) $2-$3', $value);
}
else
{
return FALSE;
}
}
}
Лучший способ не проверять телефонные номера вообще, если только вы не уверены на 100%, что имеете дело только с телефонными номерами в США или, по крайней мере, в Северной Америке. Как только вы допускаете телефонные номера из Европы, я не думаю, что есть регекс, который охватывает все возможности.
.strip out the non-digits with this:
$justNumbers = preg_replace( '/\D/', $_POST[ 'phone_num' ] );
and see if there's enough characters!
$numRequired = 7; // make your constraints here
if( strlen( $justNumbers ) < $numRequired ){ /* ... naughty naughty ... */ }
this is loose, course, but will work for international numbers as well (as all it's really doing is see if there's over 7 numbers in the input).
just change the number of required digits according your specification.
.Решение с регулярным выражением, как объяснил Дэн, было бы способом сделать это - но вы возможно, захочется вообще переосмыслить проверку телефонных номеров. Что, если пользователь хочет добавить заметку, как на бумаге? - Я вижу, что многие значения, введенные в поля номера телефона, выглядят так:
307-555-2323 (домашний)
или
307-555-3232 после 18:00
Я думаю, что сегодня мы можем предположить пользователи знают, что ввести.