строчные буквы — PHP Ucwords с или и специальные символы

Вот что я делаю.

У меня есть пара строк, которые в верхнем регистре

†ПРИВЕТ

ДЕНЬ ИЛИ НОЧЬ

Поэтому, чтобы преобразовать их, я использую следующий код:

ucwords(strtolower($string));

Вот конечный результат:

†Привет

День или ночь

Как я могу игнорировать или любые специальные символы, так что слова могут показать

†Привет

и как я могу сохранить слова как или все строчные.

1

Решение

Пытаться:

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())

1

Другие решения

    $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);

может быть немного сложнее, но чистая идея.

0

ucwords(strtolower("†HELLO THERE"),"† "); второй параметр ucwords является необязательный разделитель. Таким образом, включив и кинжал, и пробел, ucwords будет работать для приведенных примеров.

по второму вопросу см. Вот

0

Предполагая, что слова разделены пробелом:

<?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.
0
По вопросам рекламы [email protected]