PHP preg_replace如果数字大于电话号码的4位数

时间:2018-04-15 05:57:29

标签: php regex

我已经创建了替换字符串中的数字的函数,但是它替换了所有数字,如果字符串中的数字超过4位,我想让它工作,

({ case "a" => "b"}: PartialFunction[String, String]).apply("b")

这里删除的所有数字都替换为字符串中的*,如果字符串中的数字超过4,我想替换,如果数字小于4则保留,所以其他数字除了电话外不会被替换数字。

3 个答案:

答案 0 :(得分:0)

这是一个简短的脚本,可以按照您的描述处理数字:

$string = "random text 123454";
$pattern = "/\d{5,}/";
$descf = preg_replace($pattern, "*****", $string);
echo $descf;

请注意,它只会将输入字符串中包含四位或更多位数的数字替换为五颗星。我没有检查你的电子邮件正则表达式逻辑,这也可能有问题。

答案 1 :(得分:0)

不需要正则表达式。
您可以使用substr,strlen和str_pad来执行相同的操作 一般来说,正则表达式使用更多的内存和性能,如果它是一个像这样的简单任务。

$phone = 123456789;

Echo substr($phone, 0,4) . Str_pad("", strlen($phone)-4,"*");
// 1234*****

https://3v4l.org/CPJ52

答案 2 :(得分:-1)

function remove_details($string) {
        $patterns = array();
        $patterns[0] = '/([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/';
        $patterns[1] = '/([0-9]+[\- ]?[0-9]+)/';
        $replacements = array();
        if(strlen($string)>4)
        {
            $replacements[0] = '*****';
            $replacements[1] = '*****';
            $descf = preg_replace($patterns, $replacements, $string);
        }
        $descf = preg_replace($patterns, $replacements, $string);

            echo $descf;
    }