0

基本上我只是想知道是否有一种简单的方法来检测字符串是否全大写,然后相应地使替换它的东西大写或不大写。

例子:

 $str = "WELL HI THERE BOB!";
 $str = preg_replace("hi", "greetings", $str);

那会出现“WELL greetings THERE BOB”,但我希望它出现“WELL GREETINGS THE BOB”。

我想要:

 $str = "Well hi there bob";
 $str = preg_replace("hi", "greetings", $str);

出来:“你好,鲍勃!”

所以,再次,我希望它保持全部大写,但前提是它已经全部大写。

4

3 回答 3

3

不幸的是,您不能仅使用正则表达式搜索/替换来做到这一点。如果您只需要担心单个单词,您可以使用:

str_replace(array("hi", "HI"), array("goodbye", "GOODBYE"), $str);

根据您可以使用的确切需求preg_replace_callback,您可以获得完全匹配并检查匹配值的单个字母的大小写并基于此返回替换。

于 2013-04-30T03:23:57.457 回答
2

您可以使用该ctype_upper()函数来确定字符串是否全部为大写:

$str = "WELL HI THERE BOB!";
$replace = "greetings";

$replace = ctype_upper($str) ? strtoupper($str) : strtolower($replace);
$str = str_replace("hi", $replace, $str);

我使用三元运算符来测试是否$str为大写。如果是,$replace则转换为大写。如果不是,则将其转换为小写。

输出

$str = "WELL GREETINGS THERE BOB!";

于 2013-04-30T03:23:57.583 回答
0

试试这个:

<?php $str = "WELL HI THERE BOB!";  
 $str = str_replace('hi', 'greetings', $str);
 $str = str_replace('HI', 'GREETINGS', $str);
    if (!(strtoupper($str) == $str)) {      
    $str = ucfirst(strtolower($str)); 
  } else{
    $str = strtoupper($str);      
  }
 echo $str; 
 ?>

输出:

当输入为:$str = "WELL HI THERE BOB!"

WELL GREETINGS THERE BOB!

当输入是 $str = "WELL hi THERE BOB!";

Well greetings there bob! 
于 2013-04-30T03:51:10.720 回答