如何转换电话,传真,邮政编码格式的数据库条目


How to Convert Phone, Fax, Zip Code Formats for Database Entry

我有电话、传真和邮政编码的屏蔽输入。电话和传真的格式类似(999)999-9999,邮政编码的格式类似99999--9999。当我提交页面时,数据库需要不同的格式。当我更新数据库时,我只需要传入数值。在将这些格式传递给SQL INSERT之前,我需要转换它们。如何将页面上显示的格式转换为数据库所需的格式?

数据库需要电话和传真格式,如:1234567890
和邮政编码格式,如:123456789(尽管它不要求全部为9位,因为大多数人只输入前5位的邮政编码)

虽然它不能正确地转换数字,但这里有一个jsFiddlehttp://jsfiddle.net/HMG28/

我在jsFiddle上添加了一个按钮,它只是将结果附加到一个div中。在我的真实页面上,这是一个Submit按钮,它发布值,以便在我的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值,只是在这个例子中没有添加它。

如果需要任何其他信息,请告诉我。

屏蔽的输入非常适合验证和UI。但是字符串中的"元"字符可以很容易地删除(这就是数据库所需要的)。也就是说,有两种变体:

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的邮政编码。您可能还想(在去掉其他字符后)运行一个测试,以确保电话和zip的长度分别等于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.
}

Fiddle更新的