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”-我需要用斜杠检查