我有一个保存在$phone
变量中的电话号码,它长这样:(555) 555-5555
。我想让它看起来像这样:5555555555
。我该如何去掉字符串中的破折号、空格和括号?
preg_replace("/[^0-9]/", "", $phone);
对于不想使用正则表达式的人来说,传统的方法比较繁琐:
implode(array_filter(str_split('(555) 555-5555'), 'is_numeric'));
另一个选择是使用简单的表达式和 preg_match_all
:
[0-9]+
$phone_number_inputs = ['(555) 555-5555', '(444) 444 4444', '333-333-3333', '1-222-222-2222', '1 (888) 888-8888', '1 (777) 777-7777',
'11111(555) 555-5555'];
$phone_number_outputs = [];
foreach ($phone_number_inputs as $str) {
preg_match_all('/[0-9]+/', $str, $numbers, PREG_SET_ORDER, 0);
foreach ($numbers as $number) {
$phone_number .= $number[0];
}
if (strlen($phone_number) == 10 || strlen($phone_number) == 11) {
array_push($phone_number_outputs, $phone_number);
print(" " . $phone_number . " may be a phone number! \n");
} else {
print(" " . $phone_number . " may not be a phone number! \n");
}
$phone_number = null;
}
var_export($phone_number_outputs);
5555555555 may be a phone number!
4444444444 may be a phone number!
3333333333 may be a phone number!
12222222222 may be a phone number!
18888888888 may be a phone number!
17777777777 may be a phone number!
111115555555555 may not be a phone number!
而var_export($phone_number_outputs);
将会输出:
array (
0 => '5555555555',
1 => '4444444444',
2 => '3333333333',
3 => '12222222222',
4 => '18888888888',
5 => '17777777777',
)
最好找到类似于方法1的解决方案。
但是,根据我们可能有的输入,我们还可以设计一些更复杂的表达式,例如:
^(?:[0-9][- ])?\(?[0-9]{3}\)?[- ][0-9]{3}[- ][0-9]{4}$