在电话号码输入中捕捉意外情况


Catching the unexpected in phone number entry

现在我有以下内容:

 if(strlen($phbook_number)>6){
     $phbook_number=preg_replace("/^('d{3})('d{3})('d{4})$/", "$1-$2-$3", $phbook_number);
 }

我的目标是,无论用户如何输入电话号码,它都会出来并作为 XXX-XXX-XXXX 添加到数据库中。

上面有效,直到他们用 123-3839282 之类的东西打破它。我总是可以进行强制检查,但我更喜欢捕获所有内容并更改为我的格式。

是否有一种理想的方法来解决这个问题,或者我需要为每个可能的组合编写代码?

如果您提供更多可能的案例,这将有所帮助。至少使用这个:

1233839282

123-3839282

123-383-9282

+123-383-9282

电话: +123 383 9282

$phbook_number=preg_replace("/^'+?('d{3})(-| )?('d{3})(-| )?('d{4})$/", "$1-$3-$5", $phbook_number);

基本上你只需要把 wathever simbol get 放在可选大小写的数字中"?"

PD:对不起我的英语...

更新

preg_replace("/^['+0-9's')'-'(]*('d{3})['s')'-'(]*('d{3})['s')'-'(]*('d{4})['s')'-]*$/", "$1-$2-$3", $input_lines);

现在适用于空格,"()"或其他,相同的逻辑,只是现在使用范围"[]"将您认为的任何内容放在每个范围内的数字中间

我的解决方案:

// strip everything but the numbers
$phbook_number=preg_replace("/'D/", "", $phbook_number);
// remove the one country code so it can be formatted correctly
$phbook_number=substr($phbook_number, 1);
// add dashes to the number to be submitted for visual viewing
$phbook_number=preg_replace("/^('d{3})('d{3})('d{4})$/", "$1-$2-$3", $phbook_number);