我得到了一份大写名字的清单。为了在电子邮件中敬礼的目的,我希望他们是适当的外壳。
使用PHP的字字非常容易。但是我觉得我需要一些regex函数来处理常见的异常,例如:
“O‘’Hara”、"McDonald“、"van der Sloot”等
我并不需要帮助构建regex语句来处理上面的三个示例(这会很好),因为我不知道所有常见的异常可能是什么。
肯定有人曾经面对过这个问题,任何关于已发表的解决方案的建议,或者你可以分享的东西?
发布于 2012-07-17 23:45:25
在简短的列表中使用正则表达式可能很容易,但如果必须处理数百或数千条记录,则很难做到防弹。
我宁愿用不会影响别人的东西。你怎么知道如果先生。“麦克唐纳”更喜欢“麦当劳”?
你在纠正别人的错误。如果无法更正源,则可以使用以下内容:
<?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.
)
*/
?>我希望它有用。
发布于 2016-03-22 11:09:14
我为此编写了一个小库:https://github.com/tamtamchik/namecase,您可以用作曲家安装它。
对于您的输入,它使用以下代码生成所需的内容:
<?php
require_once 'vendor/autoload.php'; // Composer autoload
$arr = ["O'HARA", "MCDONALD", "VAN DER SLOOT"];
foreach ($arr as $name) {
echo $name . ' => ' . str_name_case($name) . PHP_EOL;
}调用函数str_name_case,该函数随库附带在任何名称字符串上,它将被转换为适当的大小写。对于您的示例,输出将变成:
奥哈拉=> O‘’Hara 麦当劳=> MCDONALD 范德斯鲁特=>范德斯洛
https://stackoverflow.com/questions/11529213
复制相似问题