在PHP中检查一个字符串是否全部大写

43

如何判断一个字符串是否全部由大写字母组成?但是我希望函数在字符串中包含符号或数字的情况下也返回true。


你可能会发现s($str)->isUpperCase()很有用,它可以在这个独立库中找到。 - caw
不需要使用正则表达式或函数 - 请查看我的以下解决方案。 - Brian Smith
9个回答

128

检查 strtoupper($str) == $str 是否成立。

处理非ASCII字符使用:

mb_strtoupper($str, 'utf-8') == $str


6
简单而甜美!就像俄国人在太空使用铅笔的传说一样。 - Kumar
2
除了对于“普通但非英语”字符不起作用外: 更多 strtoupper('øæåØÆÅabcABC') > øæåØÆÅABCABC可以使用 mb_convert_case 或 mb_strtoupper。 - Alexander Morland
对我来说,== 没有起作用 我宁愿使用 if (strtoupper($string) != $string) - DevJ3rry

12

1
随着这个答案受到关注,有趣的是它并没有正确回答问题,因为它没有考虑到作者要求的数字。 - jonathancardoso
1
应该注意到Ctype函数是变量和类型相关扩展的一部分。还应该注意到,自PHP 4.3.0以来,内置支持ctype。 - Robin van Baalen
如果字符串包含数字,ctype_upper将返回false。请参见下面的解决方案。 - Brian Smith
不幸的是,这个错误答案有太多的赞成票,无法被删除。遗憾的是,它将继续混淆和误导未来的研究人员。如果有办法可以删除它就好了。 - mickmackusa

9

如果您想包含数字(并且“符号”基本上是所有其他字符),那么您实际尝试测试的是小写字母的不存在

 $all_upper = !preg_match("/[a-z]/", $string)

1
我想你正在寻找这个函数。
$myString = "ABCDE";
if (ctype_upper($myString)) // returns true if is fully uppercase
{
    echo "the string $myString is fully uppercase";
}

希望它有所帮助。

1
应该注意到Ctype函数是变量和类型相关扩展的一部分。还应该注意到,自PHP 4.3.0以来,内置支持ctype。 - Robin van Baalen

1

这是我在评论区处理全大写文本的方式。

if ($str == strtoupper($str))
{
    $str = ucfirst(strtolower($str));
}

1

1

PCRE解决方案:

$all_uppercase = preg_match('#^[A-Z]+$#', $string);

请确保您不使用'i'修饰符


1
if(mb_strtoupper($string)===$string)
{
  do the required task
}
else
{
  some other task
}

3
在mb_strtoupper函数中,需将'utf-8'作为第二个参数输入,例如:mb_strtoupper('øæåØÆÅabcABC', 'utf-8')。 - Alexander Morland

0
除了Alexander Morland在Winston Ewert的回答中提到的内容,如果你需要处理utf-8带重音的字符,你可以使用以下一组函数:
define('CHARSET', 'utf-8');

function custom_substr($content='',$pos_start=0,$num_char=1){
    $substr='';
    if(function_exists('mb_substr')){
        $substr=mb_substr($content,$pos_start,$num_char,CHARSET);
    }
    else{
        $substr=substr($content,$pos_start,$num_char);
    }
    return $substr;
}
function custom_str_case($string='', $case='lower'){
    $lower = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
        "v", "w", "x", "y", "z", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï",
        "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "ø", "ù", "ú", "û", "ü", "ý", "а", "б", "в", "г", "д", "е", "ё", "ж",
        "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы",
        "ь", "э", "ю", "я"
    );
    $upper = array(
        "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
        "V", "W", "X", "Y", "Z", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï",
        "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж",
        "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ъ",
        "Ь", "Э", "Ю", "Я"
    );

    if($case=='lower'){
        $string = str_replace($upper, $lower, $string);
    }
    else{
        $string = str_replace($lower, $upper, $string);
    }

    return $string;
}
function custom_strtolower($string){
    return custom_str_case($string,'lower');
}
function custom_strtoupper($string){
    return custom_str_case($string,'upper');
}

function custom_ucfirst($string){
    $string=custom_strtolower($string);

    $first_char=custom_substr($string,0,1);
    $rest_char=custom_substr($string,1,custom_strlen($string));
    $first_char=custom_strtoupper($first_char);

    return $first_char.$rest_char;
}

function is_uppercase($string=''){
    $is_uppercase=false;

    if($string === custom_strtoupper($string)) {
       $is_uppercase=true;
    }

    return $is_uppercase;
}
function is_ucfirst($string=''){
    $first_char=custom_substr($string,0,1);

    $is_ucfirst=is_uppercase($first_char);

    return $is_ucfirst;
}

资源:https://github.com/rafasashi/PHP-Custom-String-Functions


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接