PHP 包含 or 和特殊字符的 Ucwords
PHP Ucwords with or and special characters
这是我正在做的。
我有几个字符串是大写的
†HELLO THERE
DAY OR NIGHT
所以要转换它们,我使用以下代码:
ucwords(strtolower($string));
这是最终结果:
†hello There
Day Or Night
如何忽略 †
或任何特殊字符,以便单词可以显示
†Hello There
我怎样才能让单词像 or 全部小写。
尝试:
print preg_replace_callback('#([a-zA-ZÄÜÖäüö0-9]+)#',function($a){
return ucfirst(strtolower($a[0]));
},
'†hello THERE'
);
[a-zA-ZÄÜÖäüö0-9]+
找到只有这个字符的单词
你也可以用这个代替[\w]+
参见:http://www.regular-expressions.info/wordboundaries.html
preg_replace_callback
根据找到的结果调用一个函数
function($a){}
对结果做点什么,这里 ucfirst(strtolower())
$lowerString = strtolower($string);
$stringArray = explode($lowerString, ' ');
foreach ($stringArray as $key => $singleString) {
$i = 0;
$formatedString = '';
$upcased = false;
for ($i; $i < strlen($singleString); $i++) {
$ascNum = chr($singleString[$i]);
$word = $singleString[$i];
if (!$upcased) {
if (($ascNum >= 65 && $ascNum <= 90) || ($ascNum >= 97 && $ascNum <= 122) ) {
$word = ucwords($word);
$upcased = true;
}
}
$formatedString .= $word;
}
$stringArray[$key] = $formatedString;
}
$result = implode(' ',$stringArray);
可能有点复杂,但思路很清晰。
ucwords(strtolower("†HELLO THERE"),"† ");
ucwords 的第二个参数是一个optional delimiter。因此,通过包含 dagger 和 space,ucwords 将适用于提供的示例。
关于您的第二个问题,请参阅 here
假设单词由 space:
分隔
<?php
function custom_ucfirst($s)
{
$s = strtolower($s);
$e = (strpos($s, ' ') !== false ? explode(' ', $s) : array($s));
$keep_all_lowercase = array('or','and','but');
foreach($e as $k=>$v)
{
if(!in_array($v, $keep_all_lowercase))
{
$str_split = str_split($v);
foreach($str_split as $k2=>$v2)
{
if(in_array($v2, range('a','z')))
{
$str_split[$k2] = strtoupper($v2);
break;
}
}
$e[$k] = implode('', $str_split);
}
}
return implode(' ', $e);
}
echo custom_ucfirst('†HELLO THERE .cloud. or sky what a nice an*d ()good day.');
// †Hello There .Cloud. or Sky What A Nice An*d ()Good Day.
这是我正在做的。
我有几个字符串是大写的
†HELLO THERE
DAY OR NIGHT
所以要转换它们,我使用以下代码:
ucwords(strtolower($string));
这是最终结果:
†hello There
Day Or Night
如何忽略 †
或任何特殊字符,以便单词可以显示
†Hello There
我怎样才能让单词像 or 全部小写。
尝试:
print preg_replace_callback('#([a-zA-ZÄÜÖäüö0-9]+)#',function($a){
return ucfirst(strtolower($a[0]));
},
'†hello THERE'
);
[a-zA-ZÄÜÖäüö0-9]+
找到只有这个字符的单词
你也可以用这个代替[\w]+
参见:http://www.regular-expressions.info/wordboundaries.html
preg_replace_callback
根据找到的结果调用一个函数
function($a){}
对结果做点什么,这里 ucfirst(strtolower())
$lowerString = strtolower($string);
$stringArray = explode($lowerString, ' ');
foreach ($stringArray as $key => $singleString) {
$i = 0;
$formatedString = '';
$upcased = false;
for ($i; $i < strlen($singleString); $i++) {
$ascNum = chr($singleString[$i]);
$word = $singleString[$i];
if (!$upcased) {
if (($ascNum >= 65 && $ascNum <= 90) || ($ascNum >= 97 && $ascNum <= 122) ) {
$word = ucwords($word);
$upcased = true;
}
}
$formatedString .= $word;
}
$stringArray[$key] = $formatedString;
}
$result = implode(' ',$stringArray);
可能有点复杂,但思路很清晰。
ucwords(strtolower("†HELLO THERE"),"† ");
ucwords 的第二个参数是一个optional delimiter。因此,通过包含 dagger 和 space,ucwords 将适用于提供的示例。
关于您的第二个问题,请参阅 here
假设单词由 space:
分隔<?php
function custom_ucfirst($s)
{
$s = strtolower($s);
$e = (strpos($s, ' ') !== false ? explode(' ', $s) : array($s));
$keep_all_lowercase = array('or','and','but');
foreach($e as $k=>$v)
{
if(!in_array($v, $keep_all_lowercase))
{
$str_split = str_split($v);
foreach($str_split as $k2=>$v2)
{
if(in_array($v2, range('a','z')))
{
$str_split[$k2] = strtoupper($v2);
break;
}
}
$e[$k] = implode('', $str_split);
}
}
return implode(' ', $e);
}
echo custom_ucfirst('†HELLO THERE .cloud. or sky what a nice an*d ()good day.');
// †Hello There .Cloud. or Sky What A Nice An*d ()Good Day.