【发布时间】:2009-12-20 22:48:22
【问题描述】:
验证在 codeigniter 中输入的电话号码的好方法是什么?
这是我第一次编写应用程序,我根本不懂正则表达式。
为电话号码设置三个输入字段是否更容易?
【问题讨论】:
标签: codeigniter
验证在 codeigniter 中输入的电话号码的好方法是什么?
这是我第一次编写应用程序,我根本不懂正则表达式。
为电话号码设置三个输入字段是否更容易?
【问题讨论】:
标签: codeigniter
这是我在网上找到的一个很酷的正则表达式。它验证几乎任何美国格式的数字并将其转换为 (xxx) xxx-xxxx。我认为这很棒,因为人们可以使用他们习惯使用的任何格式输入任何 10 位数的美国电话号码,并且您可以从中获得正确格式的号码。
这是您可以放入 MY_form_validation 类的整个函数。我希望我的表单允许空字段,所以如果你想强制一个值,你必须改变它。
function valid_phone_number_or_empty($value)
{
$value = trim($value);
if ($value == '') {
return TRUE;
}
else
{
if (preg_match('/^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/', $value))
{
return preg_replace('/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/', '($1) $2-$3', $value);
}
else
{
return FALSE;
}
}
}
【讨论】:
最好的方法是根本不验证电话号码,除非您绝对 100% 肯定您只处理美国或至少北美的电话号码。一旦您允许来自欧洲的电话号码,我认为没有涵盖所有可能性的正则表达式。
【讨论】:
用这个去掉非数字:
$justNumbers = preg_replace( '/\D/', $_POST[ 'phone_num' ] );
看看字数够不够!
$numRequired = 7; // make your constraints here
if( strlen( $justNumbers ) < $numRequired ){ /* ... naughty naughty ... */ }
当然,这很松散,但也适用于国际号码(因为它真正做的是查看输入中是否有超过 7 个号码)。
只需根据您的要求更改所需位数。
【讨论】:
Dan 解释的正则表达式解决方案将是解决问题的方法 - 但您可能需要重新考虑验证电话号码。如果用户想像他/她在纸上那样添加注释怎么办? - 我看到在电话号码字段中输入了许多值,例如:
307-555-2323(家)
或
下午 6 点后拨打 307-555-3232
我认为今天我们可以假设用户知道要输入什么。
【讨论】: