如何检查输入值是否以大写字母开头,或者是否具有小写字母/,或者在PHP中全部为大写字母?

时间:2019-04-08 09:43:18

标签: php html

我对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'];
    }
?>

4 个答案:

答案 0 :(得分:3)

答案非常简单。您可以结合使用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
}

如果您将它们混搭在一起,则几乎可以完成所有事情。

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

答案 1 :(得分:1)

  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.
    

答案 2 :(得分:1)

一般情况检查功能。

无需使用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()-如果您想在用户输入中强制使用语法标准而不需要报告错误,两者都可以根据您的问题提供帮助。

答案 3 :(得分:0)

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

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

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

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

类似地,您可以使用strtolower()

将字符串转换为小写