Я проверяю номера телефонов, и это мои условия,
if (!empty($phone)) {
if (!filter_var($phone, FILTER_VALIDATE_INT) || !filter_var($phone, FILTER_VALIDATE_INT) === 0 || !is_numeric($phone) || !intval($phone)) {
// Error msg
// This segment working fine but
// Its throwing error msg when I am using a mobile number starting with a zero
// Like 01234567890
} else {
if (strlen($phone) > 16 || strlen($phone) < 8) {
// Error msg
} else {
// Valid msg
}
}
} else {
// Error msg
}
Я хочу через сообщение об ошибке, если кто-то использует 8 нулей или 16 нулей, и я думаю, что это работает, но если кто-то использует действительный номер телефона, начинающийся с нуля, то также выдает сообщение об ошибке.
Как передать число, начинающееся с нуля, но не со всеми нулями?






Используйте ту же классическую технику просмотра вперед, которая обычно используется для проверки паролей.
Убедитесь, что телефон содержит от 8 до 16 цифр и содержит хотя бы одну ненулевую цифру.
Код: (Демо)
echo preg_match('/^(?=0*[1-9])\d{8,16}$/', $phone) ? 'Pass' : 'Fail';
Не преобразовывайте телефонные номера в целые числа и не храните их в виде целых чисел в базе данных, если в вашем проекте они могут начинаться с нуля.
Без регулярного выражения используйте набор вызовов строковых функций для того же эффекта. Демо
echo ctype_digit(ltrim($phone, '0')) && $length >= 8 && $length <= 16 ? 'Pass' : 'Fail';
Номер телефона не является целым числом. Подумайте, например, американских служебных номеров, таких как
1-800-CALLME