php能否在转换字符串的其余部分时过滤字符串中的单词

php能否在转换字符串的其余部分时过滤字符串中的单词,php,Php,我在表单中使用此函数来处理文本转换。这是一个内部(工作场所)web表单。它转化为 主大街/大道->主大街/大道 apt.#a1->apt.#a1 1234西。缅因街(儿童公园)->1234西缅因街(儿童公园) 史密斯奥洛克->史密斯奥洛克 mcbride macgregor->mcbride macgregor macias machado->macias machado 因此,我的问题 如何包含不应转换的名称或单词的筛选列表,如Macias、Macayo、Machado、Mack、machin

我在表单中使用此函数来处理文本转换。这是一个内部(工作场所)web表单。它转化为

主大街/大道->主大街/大道
apt.#a1->apt.#a1
1234西。缅因街(儿童公园)->1234西缅因街(儿童公园)
史密斯奥洛克->史密斯奥洛克
mcbride macgregor->mcbride macgregor
macias machado->macias machado

因此,我的问题

如何包含不应转换的名称或单词的筛选列表,如Macias、Macayo、Machado、Mack、machine等

function uc_names($name_text) {
    $name_text = strtolower($name_text);
    $name_text = join("#", array_map('ucwords', explode("#", $name_text)));
    $name_text = join("/", array_map('ucwords', explode("/", $name_text)));
    $name_text = join("(", array_map('ucwords', explode("(", $name_text)));
    $name_text = join("'", array_map('ucwords', explode("'", $name_text)));
    $name_text = join("-", array_map('ucwords', explode("-", $name_text)));
    $name_text = join("Mc", array_map('ucwords', explode("Mc", $name_text)));
    $name_text = join("Mac", array_map('ucwords', explode("Mac", $name_text)));
    return trim($name_text);
    }

像这样的怎么样

$bar = 'HELLO WORLD!';
$bar = ucwords($bar);             // HELLO WORLD!
$bar = ucwords(strtolower($bar)); // Hello World!
还是朝这个方向

function ucsmart($text)
{
   return preg_replace('/([^a-z]|^)([a-z])/e', '"$1".strtoupper("$2")', strtolower($text));
}

我还没有测试第二个

如果没有“Mac”名称的详尽列表,我不确定您是否可以这样做。我建议你把这个想法忘在Mac名称的大写字母上。谢谢你,但我不会轻易放弃。我倾向于同意@Colin。然而,唯一的想法是,可能需要转换的“mac”名称列表比不需要转换的(可能是无限的)名称列表要小?!所以,当你认为某些‘MAC’的名字是有效的时,你的过滤器的逻辑就会变得更困难。“麦克唐纳德”和“麦克唐纳德”两者都可以。但是,我认为问题是转换包含“MAC”的特定词,而不是一般的词的上部外壳。你是正确的。问题在于“Mac”。麦克布莱德很好,但我不想把“机器”这个词改成“史蒂夫的机器店”。马查多的名字也是一样,而不是马查多。看看这个链接的最后一篇文章。我想这正是你想要的