Белый список в php - PullRequest
       26

Белый список в php

0 голосов
/ 10 августа 2009

У меня есть вход для пользователей, где они должны ввести свой номер телефона. Проблема в том, что некоторые люди пишут свой номер телефона с дефисами и пробелами в них. Я хочу поместить вход через фильтр, чтобы удалить такие вещи и хранить только цифры в моей базе данных.

Я подумал, что мог бы сделать несколько str_replace () для пробелов и специальных символов. Однако я думаю, что лучшим подходом было бы выбрать только цифры, а не удалять все остальное. Я думаю, что я слышал термин "белый список" об этом.

Не могли бы вы указать мне направление решения этой проблемы в PHP?

Пример : я хочу, чтобы вход "0333 452-123-4" приводил к "03334521234"

Спасибо!

Ответы [ 4 ]

4 голосов
/ 10 августа 2009

Это нетривиальная проблема, потому что есть много разговорных и региональных различий. Пожалуйста, обратитесь к Каков наилучший способ преобразования телефонных номеров в международный формат (E.164) с использованием Java? Это Java, но применяются те же правила.

Я бы сказал, что если вам не нужно что-то более полнофункциональное, сделайте это просто. Создайте список действительных регулярных выражений и проверяйте ввод каждого из них, пока не найдете совпадение.

Если вы хотите действительно просто, просто удалите не цифры:

$phone = preg_replace('![^\d]+!', '', $phone);

Кстати, выбор цифр по определению такой же, как и удаление всего остального. Если вы имеете в виду что-то другое, вы можете перефразировать это.

1 голос
/ 10 августа 2009
$number = filter_var(str_replace(array("+","-"), '', $number), FILTER_SANITIZE_NUMBER_INT);

Filter_Var удаляет все, кроме плюсов и минусов, и str_replace избавляется от них.

или вы можете использовать preg_replace

$number = preg_replace('/[^0-9]/', '', $number);
0 голосов
/ 10 августа 2009

На стороне клиента я рекомендую использовать некоторые форматы, которые вы проектируете при создании формы. Это хорошо для почтовых или телефонных полей. Взгляните на этот jquery плагин для справки. Это будет намного легче позже на стороне сервера.

0 голосов
/ 10 августа 2009

Вы можете сделать это двумя способами. Выполните итерацию по каждому индексу в строке и запустите для него is_numeric (), или вы можете использовать регулярное выражение для строки.

...