Причина, по которой ваш код не работает, не из-за вашей логической логики, а из-за использования isset()
. В случае <input type="text">
, $_POST['fieldName']
всегда будет установлен, независимо от того, является ли значение пустым или нет.
Вместо этого используйте $_POST['fieldName'] != ''
, чтобы определить, ввел ли пользователь значение. НЕ ИСПОЛЬЗУЙТЕ empty()
, поскольку при этом любое ложное значение будет возвращено как пустое (0
, 000
, false
и т. Д.).
Лично я предпочитаю использовать один <input type="type">
для номера телефона. Это менее раздражает, чем создание пользовательских переключателей, а также упрощает проверку.
Этот пример действительно проверяет, соответствует ли число правилам NANP . Я нахожу абсолютно смешным, что так много приложений / веб-сайтов следят за этим этапом проверки.
// Did the user post a number?
if($_POST['phone'] != '') {
// Get only the numbers, we don't care how the user formatted their number
$_POST['phone'] = preg_replace('/[^0-9]/', '', $_POST['phone']);
// Is it a valid NANP phone number?
if(preg_match('/^1?[2-9][0-8][0-9][2-9][0-9]{6}$/i', $_POST['phone']) === 1) {
echo "Valid NANP phone number";
// Trim the leading one
$_POST['phone'] = ltrim($_POST['phone'], '1');
// Format as wanted
$_POST['PhoneNumber'] = '+01'.substr($_POST['phone'],0,3).'-'.substr($_POST['phone'],3,3).'-'.substr($_POST['phone'],6,4);
} else {
echo "Invalid phone number";
}
} else {
echo "User didn't provide phone number";
}