我屏蔽了电话,传真和邮政编码的输入。电话和传真的格式如(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');
另一方面,我在输入上有名字,所以我可以发布值,我只是没有在这个例子中添加它。
如果需要任何其他信息,请与我们联系。
答案 0 :(得分:1)
屏蔽输入使其非常适合验证和UI。但是字符串中的“meta”字符可以很容易地删除(这是你的数据库所需要的)。据说,有两种变化:
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。 e.g。
// 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.
}