全部, 我正在尝试将姓氏插入数据库。我希望第一个字母大写为名称,如果他们使用两个姓氏,则将第一个和第二个名称大写。例如,如果有人进入:
marriedname maidenname
如果有两个以上的名字,它会将此转换为Marriedname Maidenname等等。另一种情况是有人在他们的名字中有一个撇号,所以如果有人进入,那么无论如何都要这样做:
的O'Connell
这需要转换为O'Connell。我正在使用:
ucfirst(strtolower($last_name));
但是,正如您所知,这对所有场景都不起作用。谢谢你的建议!
答案 0 :(得分:34)
这将使所有单词的首字母和撇号后的字母大写。它会使所有其他字母小写。它应该适合你:
str_replace('\' ', '\'', ucwords(str_replace('\'', '\' ', strtolower($last_name))));
答案 1 :(得分:22)
你可以试一试这个词
<?php echo ucwords(strtolower('Dhaka, JAMALPUR, sarishabari')) ?>
结果是:Dhaka, Jamalpur, Sarishabari
答案 2 :(得分:21)
这些都不是UTF8友好的,所以这里有一个完美无瑕的(到目前为止)
function titleCase($string, $delimiters = array(" ", "-", ".", "'", "O'", "Mc"), $exceptions = array("and", "to", "of", "das", "dos", "I", "II", "III", "IV", "V", "VI"))
{
/*
* Exceptions in lower case are words you don't want converted
* Exceptions all in upper case are any words you don't want converted to title case
* but should be converted to upper case, e.g.:
* king henry viii or king henry Viii should be King Henry VIII
*/
$string = mb_convert_case($string, MB_CASE_TITLE, "UTF-8");
foreach ($delimiters as $dlnr => $delimiter) {
$words = explode($delimiter, $string);
$newwords = array();
foreach ($words as $wordnr => $word) {
if (in_array(mb_strtoupper($word, "UTF-8"), $exceptions)) {
// check exceptions list for any words that should be in upper case
$word = mb_strtoupper($word, "UTF-8");
} elseif (in_array(mb_strtolower($word, "UTF-8"), $exceptions)) {
// check exceptions list for any words that should be in upper case
$word = mb_strtolower($word, "UTF-8");
} elseif (!in_array($word, $exceptions)) {
// convert to uppercase (non-utf8 only)
$word = ucfirst($word);
}
array_push($newwords, $word);
}
$string = join($delimiter, $newwords);
}//foreach
return $string;
}
用法:
$s = 'SÃO JOÃO DOS SANTOS';
$v = titleCase($s); // 'São João dos Santos'
答案 3 :(得分:5)
使用此内置功能:
ucwords('string');
答案 4 :(得分:2)
我不相信会有一个很好的答案涵盖所有情景。 ucwords
的PHP.net论坛有相当多的讨论,但似乎没有一个答案。我建议你使用大写标准化或单独留下用户的输入。
答案 5 :(得分:1)
您可以将preg_replace
与e
标志一起使用(执行php函数):
function processReplacement($one, $two)
{
return $one . strtoupper($two);
}
$name = "bob o'conner";
$name = preg_replace("/(^|[^a-zA-Z])([a-z])/e","processReplacement('$1', '$2')", $name);
var_dump($name); // output "Bob O'Conner"
也许可以改进正则表达式模式,但我所做的是:
$1
是行的开头或任何非字母字符。$2
是任何小写字母字符然后我们用简单processReplacement()
函数的结果替换它们。
如果您使用的是PHP 5.3,则可能需要使processReplacement()
成为匿名函数。
答案 6 :(得分:1)
对于主要问题,这是一个更简单,更直接的答案。下面的函数模仿PHP方法。如果PHP在将来使用其命名空间扩展它,则首先检查测试。我在我的wordpress安装中使用这种防水语言。
$str = mb_ucfirst($str, 'UTF-8', true);
这使得第一个字母大写,所有其他小写为Q。如果第三个arg设置为false(默认值),则不会操纵字符串的其余部分。
// Extends PHP
if (!function_exists('mb_ucfirst')) {
function mb_ucfirst($str, $encoding = "UTF-8", $lower_str_end = false) {
$first_letter = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding);
$str_end = "";
if ($lower_str_end) {
$str_end = mb_strtolower(mb_substr($str, 1, mb_strlen($str, $encoding), $encoding), $encoding);
} else {
$str_end = mb_substr($str, 1, mb_strlen($str, $encoding), $encoding);
}
$str = $first_letter . $str_end;
return $str;
}
}
/伦德曼
答案 7 :(得分:0)
首先转换为标题大小写,然后找到第一个撇号和大写NEXT字符。您需要添加许多检查,以确保在撇号之后有一个字符,并且此代码仅适用于一个撇号。例如“Mary O'Callahan O'connell”。
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
$pos = strpos($str, "'");
if ($pos != FALSE)
{
$str[$pos+1] = strtoupper($str[$pos+1]);
}
答案 8 :(得分:0)
像这样使用ucfirst(strtolower($var));
答案 9 :(得分:0)
您可以在PHP中使用strtolower
和ucwords
函数。
首先:使用strtolower('inputtedtext') then capitalise all text using
ucwords('strtolower')`降低所有输入的文本。
样品:
$text = 'tHis iS sOme tEXt'; <br>
$lower = strtolower($text);   //this will lower all letter from the text <br>
$upper = ucwords($lower);   //this will uppercase all first letter from the text <br>
echo $upper;
结果=这是一些文字
您可以在ucwords(strtolower($text));
上使用一行代码