Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-使用数组中的空格从字符串中修剪文本_Php - Fatal编程技术网

PHP-使用数组中的空格从字符串中修剪文本

PHP-使用数组中的空格从字符串中修剪文本,php,Php,我有下面的PHP代码,假设当用户在字段中输入“多余”文本时,它会删除该文本。我的代码如下: $mobileNumber = '00 356 99048123'; $excessMobileNumbers = array(//remove excess items in mobile number such as dialing codes and empty spaces // ' ' => '', '00356' => '', '+356' => '',

我有下面的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

我该怎么做呢?我使用数组作为“过滤”系统

谢谢

澄清 它不仅适用于00,甚至适用于356,如果数字是99048123,它工作正常。如果此号码为99035612,因为它有356,因此无法使用

解决方案 我发现这个解决方案似乎对我的问题有效

$mobileNumber = '00 356 99048000';
$mobileNumber = str_replace(' ','',$mobileNumber); // UPDATE
$excessMobileNumbers = substr($mobileNumber, 0, -8);
$mobileNumber = str_replace($excessMobileNumbers,'',$mobileNumber);
echo $mobileNumber;
谢谢大家的贡献。

正如建议的那样,只需取出空格上的字符串,然后只取数组中的最后一个元素

对于您给出的示例,它将如下所示:

  $mobileNumber = '00 356 99048123';
  $mobile_array = explode(' ',$mobile_number);
  $my_number = end($mobile_array); //will give you 99048123
  echo $my_number;

尽管老实说,您最好使用正则表达式类型的方法,或者使用可靠的库,如一些人建议的那样,请尝试以下方法:

$mobileNumber = '00 356 99048123';
$mobileNumberParts = explode(" ", $mobileNumber);
echo end($mobileNumberParts);

output: 99048123

使用
preg_replace
删除列出的所有“前缀”(仅在开头(^)时)


这比仅在空白处拆分要安全得多,因为有些人可能会在最后一部分之间添加更多的空白以提高可读性。

您可以使用正则表达式删除所有非数字字符:

 preg_replace("/[^0-9]/", "", $mobileNumber);
然后使用
substr
获取所需的零件:

 $my_number = substr($mobileNumber, -8);
这样,如果传入一个数字,如:

 $mobileNumber = '00 356 99-048-123';

或者任何其他非数字字符都在您实际需要的零件内,去掉这些字符后,您总是知道最后8个字符就是您要查找的数字。

我发现了这个解决方案,它似乎适用于我的情况

$mobileNumber = '00 356 99048000';
$mobileNumber = preg_replace("/[^0-9]/", '', $mobileNumber);
$excessMobileCharactors = substr($mobileNumber, 0, -8);
$mobileNumber = str_replace($excessMobileCharactors,'',$mobileNumber);
echo $mobileNumber;

感谢大家的帮助。

如果您只对最后一部分感兴趣,为什么不在空白处分解字符串并获取最后一个元素?最好使用正则表达式来完成此操作,以便可以指定00必须位于字符串的开头。删除所有非数字字符,然后获取最后8stringuse regex和preg_replace的定义-请参见下文,xplode应在给出的示例中起作用,但OP指出这是用户输入的字段。他们可以输入
0035699048123
00-356-99048123
@安东尼的想法是对的。为过滤器添加前缀不需要任何维护。但他还想删除00和00356?!正确的?所以这对OPRight不起作用,它不会出现在最后8个字符中,因此substr.moblie数字的长度可能不同-它们并不总是8位数,所以最好猜测所有可能的前缀并希望得到最好的结果?而且手机号码的长度并不是随机的,它们的长度是基于拨号计划的,OP可以假设这一点。如果是任意长度,你的手机怎么知道你什么时候拨号了?@Anthony answer最好是用户输入
'00 356 99 04 8000'
当然,如果你的运营商号码可以大于/小于8位,那么没有一个答案是好的。我更新了我的解决方案,包括
$mobileNumber=str_replace('',$mobileNumber);
删除多余的空格。就我的国家而言,所有的数字手机号码都是8个字符长的。不过安东尼的答案更好,因为它删除了所有非数字字符。ex
+356/00-04-800
谢谢。我再次改进了上面安东尼的想法。
$mobileNumber = '00 356 99048000';
$mobileNumber = preg_replace("/[^0-9]/", '', $mobileNumber);
$excessMobileCharactors = substr($mobileNumber, 0, -8);
$mobileNumber = str_replace($excessMobileCharactors,'',$mobileNumber);
echo $mobileNumber;