【问题标题】:a list of numbers while stripping everything but numbers一个数字列表,同时剥离除数字之外的所有内容
【发布时间】:2013-03-08 07:56:05
【问题描述】:

我有一个这样的数字列表:

123-4-5679 tha
546-5465-7 dsf
98-4564-64 ds8

我想在剥离除数字之外的所有内容时爆炸成它自己的价值。我正在做,但它似乎保留了一切,但它确实给了我每行的价值

$pn = preg_replace("/\r/", "\n", preg_replace("/\r\n/", "\n", $_POST['phone']));
$phone_numbers = explode("\n", $pn);

【问题讨论】:

    标签: php preg-replace explode


    【解决方案1】:

    您也可以使用正则表达式中的一行快速完成此操作。

    preg_match_all(":([0-9-]+):mi", $_POST["phone"], $match);
    

    这是example

    编辑:要删除连字符,遍历结果并将连字符替换为空字符串

    preg_match_all(":([0-9-]+):mi", $_POST["phone"], $matches);
    
    // remove extra match array
    $matches = array_shift($matches);
    
    foreach( $matches as & $match )
    {
       $match = preg_replace(":-:", "", $match);
    }
    

    更新example

    【讨论】:

    • $numbers = preg_match_all(":([\d-]+):", $phone, $m) ? $m[0] : [];
    • 我喜欢这个,但我如何删除连字符呢?
    【解决方案2】:

    我会删除除数字和换行符之外的所有内容:

    $cleaned = preg_replace("/[^0-9\n]/", "", $_POST['phone']);
    

    然后explode它:

    $numbers = explode("\n", $cleaned);
    

    【讨论】:

      【解决方案3】:

      保留所有数字,匹配除行分隔符以外的所有内容:

      ~(?![\d-]+).*~
      

      在 PHP 中使用空字符串替换每个匹配项

      $numbers = preg_replace("~(?![\d-]+).*~", '', $phone);
      

      结果:

      123-4-5679
      546-5465-7
      98-4564-64
      

      【讨论】:

        【解决方案4】:

        好吧,我错过了什么吗?

        $phone = explode(' ', $_POST['phone']);
        $phone_number = $phone[0];
        

        这不行吗?

        【讨论】:

        • 不,他想剥离除数字之外的所有内容。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        相关资源
        最近更新 更多