gpt4 book ai didi

php - 模式字符串替换算法(php + regexp)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:36 25 4
gpt4 key购买 nike

我有数百个特殊代码模板,例如:

array(
'mask' => '98-###(###)',
'detect' => '98-\d\d\d(\d\d\d)',
),
...

和输入字符串(仅数字),检测和格式化(将 # 替换为输入字符串中的数字)代码的最佳方法是什么?我的algorithm有效,但速度很慢(我需要每个请求的格式代码)-任何人都可以看到如何改进它:

<?php
class PCode
{
private static $vector = array (
0 => array (
'detect' => '247\\d\\d\\d\\d',
'mask' => '+247-####',
), // <<<<< more codes here

);
/**
*
* @param unknown $phs
* @return string
*/
public static function format($phn)
{
$result = $phn;
foreach(self::$vector as $row)
{
if(preg_match('/'.$row['detect'].'/s', $phn))
{
$reverse = array_reverse( str_split($phn) );
$reverseMask = array_reverse( str_split($row['mask']) );
$newresult = array();
$ridx = 0;
foreach($reverseMask as $k)
{
if($k=='#')
{
$newresult[] = $reverse[$ridx];
$ridx++;
}
else
$newresult[] = $k;
}
$result = implode('', array_reverse( $newresult ));
}
}
return $result;
}
}

最佳答案

$maskes = array(
'\b98-\d{3}\(\d{3}\)\b' => '98-###(###)',
'\b247\d{4}\b' => '+247-####',
);
preg_replace(
array_keys($maskes),
数组值($maskes),
$文本
);

但是如果您的电话号码存储在数据库中,也许您可​​以存储国家/地区。然后为每个电话号码应用本地化模式。查看 http://geonames.org 上的工具此外,想想当你的代码太慢时如何缓存结果。

关于php - 模式字符串替换算法(php + regexp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29693996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com