找不到一个似乎足够简单的解决方案。我有用户输入字段,想检查用户是否在要求的代码前面加了一个S(示例代码S123456,所以我想检查一下,以确保他们没有只加123456(。
// Function to check string starting with s
if (isset($_REQUEST['submitted'])) { $string=$_POST['required_code'];function startsWith ($string, $startString){$len = strlen($startString);return (substr($string, 0, $len) === $startString);
}
// Do the check
if(startsWith($string, "s"))echo "Code starts with a s";else echo "Code does not start with a s";}
问题是,如果用户输入大写字母S,则这被视为不是小写字母S。
所以我可以用绕过这个问题
$string = strtolower($string);
因此,如果用户输入大写的S,则在检查之前会将其转换为小写。但这是最好的方式吗?难道没有什么方法可以说S或S吗?有什么建议吗?
您可以使用stripos而不是创建自己的函数。Stripos尝试查找第一个出现的不区分大小写的子字符串。
因此,作为检查,你可以:
if(stripos($string, "s") === 0)
您需要3个等号,因为如果stripos找不到子字符串,它将返回false(0(。
任你挑选;有很多方法可以查看字符串是否以"S"开头。其中有些区分大小写,有些则不然。下面的选项应该都有效,尽管我认为它们中没有任何一个比您当前的解决方案更好。stripos()
可能是"最干净"的检查。如果您需要多字节支持,还有mb_stripos()
变体。
(尽管;请记住,stripos()
也可以返回false
。如果使用该选项,始终使用更严格的"相同"运算符===
,而不是==
,以防止类型杂耍。(
if (stripos($string, 's') === 0) {
// String starts with S or s
} else {
// It does not
}
if (str_starts_with($string, 's') || str_starts_with($string, 'S')) // ...
if (in_array(substr($string, 0, 1), ['S', 's'], true)) // ...
if (preg_match('/^s/i', $string)) // ...
// Many other regexp patterns also work
谢谢大家,这是
if (str_starts_with($string, 's') || str_starts_with($string, 'S')) // ...
我在找我试过
if (str_starts_with($string, 's' || 'S')) // ...