我对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'];
}
?>
答案 0 :(得分:3)
答案非常简单。您可以结合使用strtoupper,strtolower和substr进行严格比较。
$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)
要检查大写字母的第一个字母,请尝试以下
preg_match("/^[A-Z]/", 'Bamboozler');// This will return true if first letter is upper case
要检查字符串中所有小写字符,可以使用ctype_lower()
函数
ctype_lower('bamboozler');// This will return true if all the character are lower cases.
要检查字符串大写的所有字符,可以使用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()