Как преобразовать форматы телефона, факса, почтового индекса для записи в базу данных

Я замаскировал входы для телефона, факса и почтового индекса. Телефон и факс имеют формат (999) 999-9999, а почтовый индекс имеет формат 99999-9999. Когда я отправляю страницу, база данных ожидает другой формат. Когда я обновляю базу данных, мне нужно передать только числовые значения. Мне нужно преобразовать форматы перед их передачей в SQL INSERT. Как мне преобразовать формат, отображаемый на странице, в формат, требуемый базой данных?

База данных ожидает форматы телефона и факса, такие как: 1234567890
и формат почтового индекса, например: 123456789 (хотя это не требует, чтобы это были все 9 цифр, поскольку большинство людей вводят почтовые индексы только с первыми 5 цифрами)

Хотя он не преобразует числа правильно, вот jsFiddle http://jsfiddle.net/HMG28/< /а>

Я добавил кнопку в jsFiddle, которая просто добавляет результаты в div. На моей реальной странице это кнопка «Отправить», которая публикует значения, чтобы к ним можно было получить доступ и передать их в моем операторе INSERT. Я не уверен, должен ли я поймать это и преобразовать с помощью jQuery или в моем разделе PHP. (PHP — это то, что я думаю, было бы правильным, просто не уверен, как это сделать)

Вот фрагмент кода в jsFiddle:

<label>Phone: </label><input type="text" id="phone" placeholder="(555) 555-5555" />
<label>Fax: </label><input type="text" id="fax" placeholder="(555) 555-5555" />
<label>Zip Code: </label><input type="text" id="zipcode" placeholder="Zip Code" />

$('#phone').mask('(999) 999-9999');
$('#fax').mask('(999) 999-9999');
$('#zipcode').mask('99999-9999');

Кстати, у меня есть имена на входах, поэтому я могу отправить значения POST, я просто не добавлял их в этом примере.

Пожалуйста, дайте мне знать, если потребуется какая-либо дополнительная информация.


person Brian    schedule 26.06.2013    source источник
comment
Предполагая, что он проходит проверку (и я понимаю вопрос), просто используйте некоторую замену регулярного выражения, которая удаляет все нечисловые символы, такие как $phone = preg_replace('/([^\d])/','',$phone)?   -  person Brad Christie    schedule 26.06.2013


Ответы (1)


Замаскированные входные данные удобны для проверки и пользовательского интерфейса. но «мета»-символы в строке могут быть легко удалены (именно это похоже на то, что нужно вашей базе данных). с учетом сказанного, два варианта:

PHP (предпочтительный метод, наименьшая возможность взаимодействия с пользователем):

// perform the cleanse server-side
$param = preg_replace('/([^d])/', '', $param);

JavaScript:

// perform the cleanse client-side
param = param.replace(/([^\d])/g,'');

В любом случае у вас останется 1234567890 для номера телефона (123) 456-7890 и 123456789 для почтового индекса 12345-6789. Вы также можете (после удаления других символов) запустить тест, чтобы убедиться, что длина равна 10 и 9/5 для телефона и почтового индекса соответственно. например

// NOTE: i'm not checking `$_POST` but you should...
$phone = preg_replace('/([^\d])/', '', $_POST['phone']);
$fax   = preg_replace('/([^\d])/', '', $_POST['fax']);
$zip   = preg_replace('/([^\d])/', '', $_POST['zip']);

if (strlen($phone) == 10
  && strlen($fax) == 10
  && (strlen($fax) == 5 || strlen($fax) == 9)){
  // proceed with inserting the three values in to the databasse;
  // they are now clean and are of the proper lengths.
}

Обновлен скрипт

person Brad Christie    schedule 26.06.2013
comment
спасибо. Это сделало именно то, что мне было нужно! Просто побочный вопрос, потому что мне любопытно... Я знаю, что получу тот же результат, используя JavaScript или PHP, но лучше ли тот или другой? Или это будет просто личное предпочтение? - person Brian; 26.06.2013
comment
Судя по вашему обновлению, да, я определенно проверяю, установлен ли $_POST :) - person Brian; 26.06.2013
comment
@Brian: когда дело доходит до размещения вещей в вашей базе данных, на сервере лучший метод. Никогда не доверяйте пользователю; независимо от того, что вы делаете на веб-странице, есть способы обойти это; поэтому сервер должен выполнять любую проверку после передачи. Воспринимайте проверку JavaScript как удобство и не более того. - person Brad Christie; 26.06.2013
comment
Отличное объяснение! Очень ценю помощь и дополнительные усилия по объяснению! Спасибо! - person Brian; 26.06.2013