gpt4 book ai didi

php - preg_replace 以突出显示格式化的电话号码

转载 作者:行者123 更新时间:2023-12-04 17:51:26 24 4
gpt4 key购买 nike

我很难尝试突出显示格式化电话号码的搜索结果。

$search_txt='5678'; // user generated (can be anything)
$phone_number='(123) 456-7890'; // always in this format

我正在尝试获取突出显示的字符串:

$highlighted = preg_replace('#'. preg_quote($search_txt) .'#i', '<span style="background-color:#ff0;">\\0</span>', $phone_number);

$search_txt 可以是任何东西。 “7890”有效,“456-7890”有效,但由于 $phone_number 中的“-”,“5678”无效。

我也尝试剥离 $phone_number 的格式(即“1234567890”),但如果他们输入字母字符“56-78”,我也会遇到同样的问题。

如果我剥离 $phone_number ("1234567890") 和 $search_txt ("5678"),突出显示工作并返回 1234<span style="background-color:#ff0;">5678</span>90 ,但我不知道如何使用字符串中的突出显示代码重新引入格式。

最后的字符串必须是电话号码格式“(123) 456-7890”,其中包含突出显示的 HTML。

选项 #1:我可以在忽略号码中的 HTML 标记的同时格式化电话号码吗?

即ojit_代码

成为 1234<span style="background-color:#ff0;">5678</span>90

选项 #2:我可以在匹配时忽略 (123) 4<span style="background-color:#ff0;">56-78</span>90 中的字母字符,但将它们包含在替换字符串中吗?

即“5678”将匹配“(123) 456-7890”

并返回 $phone_number

最佳答案

假设您的标签没有数值作为一个明显的例子:

$phone = "1234<span>5678</span>90";
$pattern = '/(\D*\d\D*\d\D*\d)(\D*\d\D*\d\D*\d)(\D*\d\D*\d\D*\d\D*\d\D*)/';
$replace = '($1) $2-$3';
echo "\n\n".preg_replace($pattern, $replace, $phone);

产生:

(123) 4<span>56-78</span>90

基本上,我在每个数字之前和最后一个数字之后捕获零个或多个非数字值。这假设您已将搜索字符串和目标电话号码缩减为简单的数字字符串(“4567”和“1234567890”),然后执行搜索和替换以放置 HTML 标记。

如果您的 HTML 标记中必须包含数字,那么您必须将\D 替换为类似 <[^>]*> 的内容。

$pattern = '/((?:<[^>]*>)*\d(?:<[^>]*>)*\d(?:<[^>]*>)*\d)...

(?:...) 构造组项目而不捕获它们。使用 {} 构造来增加一点优雅,您拥有:

$pattern = '/((?:(?:<[^>]*>)*\d){3})((?:(?:<[^>]*>)*\d){3})((?:(?:<[^>]*>)*\d){4}(?:<[^>]*>)*)/';

关于php - preg_replace 以突出显示格式化的电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44443359/

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