我有以下PHP代码,假设用户在字段中输入“多余”文本。我有以下代码如下:
$mobileNumber = '00 356 99048123';
$excessMobileNumbers = array(//remove excess items in mobile number such as dialing codes and empty spaces
// ' ' => '',
'00356' => '',
'+356' => '',
'356' => '',
'00' => '',
);
输出为99048123
以上代码效果很好,因为数字99048123不包含356或00。
但当我使用这个号码00 356 99008123时,号码99008123包含00.我希望它只删除00中的00,即从左侧开始离开而不离开99008123中的00。
我该如何解决?我将数组用作“过滤”系统。
由于
澄清 即使是356,它不仅仅是00,如果数字是99048123,它可以正常工作。如果这个号码为99035612,因为它有356,它不起作用。
解 我发现这个解决方案似乎适用于我的问题。
$mobileNumber = '00 356 99048000';
$mobileNumber = str_replace(' ','',$mobileNumber); // UPDATE
$excessMobileNumbers = substr($mobileNumber, 0, -8);
$mobileNumber = str_replace($excessMobileNumbers,'',$mobileNumber);
echo $mobileNumber;
谢谢大家的贡献。
答案 0 :(得分:2)
您可以使用正则表达式去除所有非数字字符:
preg_replace("/[^0-9]/", "", $mobileNumber);
然后使用substr
抓取您想要的部分:
$my_number = substr($mobileNumber, -8);
这样,如果传入的数字如下:
$mobileNumber = '00 356 99-048-123';
或任何其他非数字字符在您实际想要的部分内,在删除这些字符后,您始终知道最后8个字符是您所追求的数字。
答案 1 :(得分:0)
正如@ende-neu建议在空格上只输出explode字符串,然后取出数组中的最后一个元素。
对于您给出的示例,如下所示:
$mobileNumber = '00 356 99048123';
$mobile_array = explode(' ',$mobile_number);
$my_number = end($mobile_array); //will give you 99048123
echo $my_number;
虽然说实话,你可能最好使用正则表达式方法或使用像libphonenumber for PHP这样的实体库
答案 2 :(得分:0)
正如一些人所建议的那样,试试这个:
$mobileNumber = '00 356 99048123';
$mobileNumberParts = explode(" ", $mobileNumber);
echo end($mobileNumberParts);
output: 99048123
答案 3 :(得分:0)
使用preg_replace
删除所有列出的“前缀”(仅限于开头(^))
$number = preg_replace('/^(00|00365|\+365|365)/', '', $mobileNumber);
这比仅仅在白色空间分割更安全,因为有些人可能会在最后一部分之间添加更多的空白区域以提高可读性。
答案 4 :(得分:0)
我发现了这个解决方案,它似乎适合我的情况
$mobileNumber = '00 356 99048000';
$mobileNumber = preg_replace("/[^0-9]/", '', $mobileNumber);
$excessMobileCharactors = substr($mobileNumber, 0, -8);
$mobileNumber = str_replace($excessMobileCharactors,'',$mobileNumber);
echo $mobileNumber;
谢谢大家的帮助。