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

Я замаскировал входы для телефона, факса и почтового индекса. Телефон и факс имеют формат (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 значения, я просто не добавил их в этом примере.

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

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.
}

Скрипка обновлена

Другие вопросы по тегам