我对PHP很陌生,没有像其他语言一样有经验。我有以下形式,我想做的是检查firstname字段是否以大写开头,如果nickname字段是小写,并且lastname字段是全部大写。我见过人们将字符串和文本转换成不同的情况,但我不知道如何进行我希望实现的验证。
我已将文本转换为低/高/大小写,但这只是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'];
}
?>
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.
答案非常简单。你可以使用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
}
如果你混合搭配它们就可以得到任何完成的东西。
请注意松散和严格比较之间没有区别,但使用严格总是很好。
一般案例检查功能。
无需使用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()
- 如果您想在用户输入上强制使用语法标准而不需要错误报告,这两者都可以根据您的问题提供帮助。
如果第一个字符是大写,则返回true。而$ str是您要检查的字符串。
preg_match("/^[A-Z]/", $str );
你可以这样做,如果你需要将整个字符串转换为大写,
if( preg_match("/^[A-Z]/", $str ) ){
$str = strtoupper("$str");
echo $str;
}
类似地,您可以使用strtolower()
将字符串转换为小写