0

我屏蔽了电话、传真和邮政编码的输入。电话和传真的格式类似于 (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');

附带说明一下,我确实在输入上有名称,所以我可以发布这些值,我只是没有在这个例子中添加它。

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

4

1 回答 1

1

屏蔽的输入使其非常适合验证和 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.
}

小提琴更新

于 2013-06-26T14:59:24.870 回答