鉴于大写名称转换为Proper Case,处理"O'Hara","McDonald","van der Sloot"等

All*_*One 5 php regex text text-processing text-parsing

我提供了一个大写的名单.为了在电子邮件中致敬,我希望他们是正确的.

使用PHP的ucwords很容易做到.但我觉得我需要一些正则表达式函数来处理常见异常,例如:

"O'Hara","McDonald","van der Sloot"等

并不是说我需要帮助构造一个正则表达式语句来处理上面的三个例子(那会很好),因为我不知道所有常见的例外是什么.

当然有人之前遇到过这个问题,任何指向已发布解决方案的指针或者你可以分享的东西?

qua*_*tme 2

在提供的简短列表中使用正则表达式可能很容易,但如果您必须处理数百或数千条记录,则很难做到万无一失。

我宁愿使用不会影响其他人的东西。你怎么知道“MACDONALD”先生是否更喜欢“Macdonald”?

你正在纠正别人的错误。如果无法更正来源,您可以使用如下内容:

<?php

$provided_names = array(
  "SMITH",
  "O'HARA",
  "MCDONALD",
  "JONES",
  "VAN DER SLOOT",
  "MACDONALD"
);

$corrected_names = array(
  "O'HARA"        => "O'Hara",
  "MCDONALD"      => "McDonald",
  "VAN DER SLOOT" => "van der Sloot"
);

$email_text = array();

foreach ($provided_names as $provided_name)
{
  $provided_name = !array_key_exists($provided_name, $corrected_names) 
    ? ucwords(strtolower($provided_name)) 
    : $corrected_names[$provided_name];
  $email_text[]  = "{$provided_name}, your message text.";
}

print_r($email_text);

/* output:
Array
(
  [0] => Smith, your message text.
  [1] => O'Hara, your message text.
  [2] => McDonald, your message text.
  [3] => Jones, your message text.
  [4] => van der Sloot, your message text.
  [5] => Macdonald, your message text.
)
*/
?>
Run Code Online (Sandbox Code Playgroud)

我希望它有用。