【发布时间】:2017-06-08 18:43:18
【问题描述】:
我很难突出显示格式化电话号码的搜索结果。
$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 标记吗?
即1234<span style="background-color:#ff0;">5678</span>90
变成(123) 4<span style="background-color:#ff0;">56-78</span>90
选项 #2:我可以在匹配时忽略 $phone_number 中的字母字符,但将它们包含在替换的字符串中吗?
即"5678" 将匹配 "(123) 456-7890"
并返回(123) 4<span style="background-color:#ff0;">56-78</span>90。
【问题讨论】:
-
将数字以其原始格式保存在一个变量中,然后在另一个变量中去除破折号。进行比较并将原始数字作为突出显示的数字返回。
-
我还试图在格式化数字中突出显示搜索词(“56-78”)(当他们搜索“5678”时)。原文需要部分突出显示(不是整个字符串)。
标签: php regex preg-replace