我需要在php中使用正则表达式从一串电话号码中删除数字开头的+或0
我有这个功能去除每个非数字字符
ereg_replace("[^0-9]", "", $sPhoneNumber)
但我需要更好的东西,所有这些例子都应该......
$sPhoneNumber = "+3999999999999"
$sPhoneNumber = "003999999999999"
$sPhoneNumber = "3999999999999"
$sPhoneNumber = "39 99999999999"
$sPhoneNumber = "+ 39 999 99999999"
$sPhoneNumber = "0039 99999999999"
......喜欢这个
$sPhoneNumber = "3999999999999"
任何建议,非常感谢!
答案 0 :(得分:5)
作为正则表达式的替代方法,您可以使用ltrim()
:
echo ltrim('003999999999999', '+0');
第二个参数是一个字符列表字符串,在您的情况下为+
和0
。
注意:这不会删除字符串中的空格,只会从开头删除+
和0
。
答案 1 :(得分:3)
你可以这样做:
$result = preg_replace('~^[0\D]++|\D++~', '', $sPhoneNumber);
答案 2 :(得分:0)
要删除开头+
或0
,这应该有效
ereg_replace('^(\+|0)+?', '', $sPhoneNumber);
答案 3 :(得分:0)
之后只需intval()
即可删除前导零。
答案 4 :(得分:0)
答案 5 :(得分:0)
说实话,你根本不需要正则表达式。这也是一个干净的解决方案。
// first remove spaces
// trim + and 0 characters at the beginning
ltrim(str_replace(' ', '', $sPhoneNumber), '+0');
这是我的测试代码
<?php
$sPhoneNumber[0] = "+3999999999999";
$sPhoneNumber[1] = "003999999999999";
$sPhoneNumber[2] = "3999999999999";
$sPhoneNumber[3] = "39 99999999999";
$sPhoneNumber[4] = "+ 39 999 99999999";
$sPhoneNumber[5] = "0039 99999999999";
foreach ($sPhoneNumber as $number) {
$outcome = ltrim(str_replace(' ', '', $number), '+0');
echo $number . ':' . "\t" . $outcome . '(' . ($outcome === '3999999999999' ? 'true' : 'false') . ')' . "\n";
}