【问题标题】:How to check if input value begins with an uppercase/ or if it has lowercases/ or if it's all uppercase in PHP? [duplicate]如何检查输入值是否以大写/开头或是否有小写/或在PHP中是否全部大写? [复制]
【发布时间】:2019-08-29 10:19:33
【问题描述】:

我对 PHP 还是很陌生,对 PHP 的经验不如我在其他语言方面的经验。我有以下表格,我想做的是检查名字字段是否以大写开头,昵称字段是否小写,以及姓氏字段是否全部大写。我见过人们将字符串和文本转换为不同的情况,但我不知道如何进行我希望实现的验证。

我已将文本转换为小写/大写/大小写,但这只是来自 W3CSchools 的半行非常简单的代码。

此外,这不是任何其他问题的重复。其他人专注于纯 PHP 函数,例如创建字符串和回显结果,另一个问题甚至不适用于我想要实现的目标,所以我对此进行了编辑。

这里是 HTML:

<!DOCTYPE html>
<html>
    <head>
        <title>Testing case sensitive validations</title>
    </head>
    <body>
        <form name="newform" method="post" action="walkin.php">
        Firstname <input type="text" name="fname"><br><br>
        Nickname <input type="text" name="nname"><br><br>
        Lastname <input type="text" name="lname"><br><br>
        <input type="submit" name="submit" value="Submit">
        </form>
    </body>
</html> 

这是我目前拥有的 PHP:

<?php
if (isset($_POST['submit'])) {
        $fname = $_POST['fname'];
        $nname = $_POST['nname'];
        $lname = $_POST['lname'];
    }
?>

【问题讨论】:

  • 我也有点困惑,为什么 StackOverflow 去掉了高亮代码的功能,并 ctrl + K 在每行添加四个空格,他们为什么去掉这个快捷方式?跨度>
  • 他们不是还是那样工作
  • 你会如何用另一种你更精通的语言来做这件事?另外,请分享您所说的您尝试过的内容。
  • 首先:避免使用 w3schools 来学习 PHP。它充满了模糊性和不良做法。它说PHP5教程..哪个版本? 5.4 和 5.6 很不一样。另外,学习 7。其次:缩进会帮助你更快地阅读代码。第三:研究正则表达式
  • 与所有新语言一样,从The PHP Manual, string functions 开始,当您寻找可以帮助解决这个问题的东西时,您将学到其他 20 件事

标签: php html


【解决方案1】:

答案非常简单。您可以使用strtoupperstrtolowersubstr 的组合进行严格比较。

$firstLetterUppercase = 'A_word';

if(substr($firstLetterUppercase, 0, 1) === strtoupper(substr($firstLetterUppercase, 0, 1))) {
    // first letter is upper case
}

$nickNameLowerCase = 'nickname';

if($nickNameLowerCase === strtolower($nickNameLowerCase)) {
    // it's lower case
}

$lastName = 'ALL UPPER CASE';

if($lastName === strtoupper($lastName)) {
    // it's upper case
}

如果你混合搭配它们,你几乎可以完成任何事情。

请注意,这里的宽松和严格比较没有区别,但使用严格总是很好。

【讨论】:

    【解决方案2】:
    1. 要检查大写的第一个字母,请尝试以下操作

      preg_match("/^[A-Z]/", 'Bamboozler');// This will return true if first letter is upper case
      
    2. 要检查字符串的所有字符小写,可以使用ctype_lower()函数

      ctype_lower('bamboozler');// This will return true if all the character are lower cases.
      
    3. 要检查字符串的所有字符是否大写,可以使用ctype_upper()函数

      ctype_upper('BOOM');// This will return true if all the character is upper cases.
      

    【讨论】:

      【解决方案3】:

      一个通用的大小写检查函数。

      无需使用preg_match()substr()。您可以使用{0} 的字符串索引方法直接访问第一个字符。如果您想要第二个字符,请使用{1}

      function checkFirstLetter($str,$upper=true) {
        if ($upper) {
          return ($str{0} == strtoupper($str{0}));
        } else {
          return ($str{0} == strtolower($str{0}));
        }
      }
      
      $test[] = array("str" => "test", "case" => true);
      $test[] = array("str" => "Test", "case" => true);
      $test[] = array("str" => "test", "case" => false);
      $test[] = array("str" => "Test", "case" => false);
      $test[] = array("str" => "123", "case" => true);
      $test[] = array("str" => "123", "case" => false);
      $test[] = array("str" => "!@#", "case" => true);
      $test[] = array("str" => "!@#", "case" => false);
      
      foreach($test as $k => $v) {
        echo 'str:['.$v['str'].'] 
          upper:['.$v['case'].'] 
          result:['.checkFirstLetter($v['str'],$v['case']).']<br />';
      }
      

      结果:

      str:[test] upper:[1] result:[]
      str:[Test] upper:[1] result:[1]
      str:[test] upper:[] result:[1]
      str:[Test] upper:[] result:[]
      str:[123] upper:[1] result:[1]
      str:[123] upper:[] result:[1]
      str:[!@#] upper:[1] result:[1]
      str:[!@#] upper:[] result:[1]
      

      编辑: 我真的很喜欢ctype_upper($str)ctype_lower($str) 选项,但是您需要安装该扩展程序,而我不需要。如果你有这个扩展,你可以这样做:

      if (ctype_upper($str{0})) {
        // is upper first
      }
      

      还有ucfirst()ucwords() - 如果您想在用户输入上强制使用语法标准而不需要错误报告,两者都可能会根据您的问题有所帮助。

      【讨论】:

        【解决方案4】:

        如果第一个字符是大写,这将返回 true。而 $str 是您要检查的字符串。

        preg_match("/^[A-Z]/", $str );
        

        如果您需要将整个字符串转换为大写,您可以这样做,

        if( preg_match("/^[A-Z]/", $str ) ){
        $str = strtoupper("$str");
        echo $str;
        }
        

        同样你可以使用strtolower()将字符串转换为小写

        【讨论】:

        • 请注意,OP 不是询问如何转换为全低或全大,而是如何检测字符串是全低还是全大。
        猜你喜欢
        • 1970-01-01
        • 2012-06-13
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 2018-08-22
        相关资源
        最近更新 更多