Php 检查用户名登录中的域前缀
如何检查字符串中的Php 检查用户名登录中的域前缀,php,Php,如何检查字符串中的“AD\”?如果有人试图使用域前缀“AD\”登录-我希望应用程序忽略“AD\”,并在前3个字符后检查用户名 我试过: if (strpos($username, "AD\\") !== false) { $username = substr($username, 3); } 但是这不起作用。您需要再次检查您得到的是字符串的一部分,并且必须在字符串的开头 if (strpos($a,"AD\\") !== false) if (strpos($a,"AD\\")
“AD\”
?如果有人试图使用域前缀“AD\”登录-我希望应用程序忽略“AD\”
,并在前3个字符后检查用户名
我试过:
if (strpos($username, "AD\\") !== false) {
$username = substr($username, 3);
}
但是这不起作用。您需要再次检查您得到的是字符串的一部分,并且必须在字符串的开头
if (strpos($a,"AD\\") !== false)
if (strpos($a,"AD\\") == 0)
echo substr($a,3);
另一种解决方案是使用正则表达式。问题是\被识别为转义序列。因此,字符串使用“而不是”
if (strpos($a,"AD\\") !== false)
if (strpos($a,"AD\\") == 0)
echo substr($a,3);
此外,将strpos的返回值与false进行比较是有效的,因为false定义为0,但strpos实际上返回一个数值(出现字符/字符串的位置)。我强烈建议在这里进行数值比较,而不是布尔值
此示例适用于:
$username = 'AD\testuser';
if (strpos($username, "AD") <= 0) {
$username = substr($username, strpos($username, "AD")+3);
print $username;
}
else {
print $username;
}
$username='AD\testuser';
if(strpos($username,“AD”)
这将检查AD\
在字符串的任何部分中的出现情况。因此,AD\ABC
是正确的,但是ABC\AD\ABC
也是正确的
你可能想要的是使用
if (strpos($username, "AD\\") === 0) {
要知道用户名以AD\
开始。
请注意,我们正在使用=
操作符测试strpos
的返回值,因为如果未找到AD\
,它将返回false
编辑:但请注意
if (strpos($username, "AD\\") === 0) {
$username = substr($username, 3);
}
用户还可以键入AD\AD\ABC
,最终结果将是AD\ABC
。
您可能需要执行以下操作:
while(strpos($username, "AD\\") === 0) {
$username = substr($username, 3);
}
确保用户名不能以AD\
如果$username
的值实际上是AD\something
您上面的代码应该工作正常。请通过var\u dump($username)检查它;
虽然您可能应该使用==0
而不是!==false
,因为它必须出现在字符串的开头,而不是字符串中的任何其他位置。啊,是的!在我更改为!==0后,它现在可以工作了。谢谢MichaelBut,但它也应该按照您的方式工作。!==false
不是问题(只是不完全正确)此外,使用!==0
而不是==0
也不正确,因为这将查找字符串开头以外的其他地方的AD\`如果有效,则
$username`不能包含您期望的值。如果某人的用户名是“ADonald”,而此人没有键入“AD\”前缀它不起作用…我们不能只检查“AD”-我需要用斜杠检查