【问题标题】:Unable to remove White Spaces from Username [duplicate]无法从用户名中删除空格 [重复]
【发布时间】:2020-10-03 15:30:10
【问题描述】:

我正在尝试删除用户名中的空格,但出了点问题。我的另一种情况继续运行。即使我把用户名没有空格,它也不起作用

这是我的代码

$username   = trim($_POST['username']);
  $username     = strip_tags($username);
  $username     = htmlspecialchars($username);

     // username validation
  if (empty($username)) {
   $error = true;
   $usernameError = "Please enter your username.";
  } else if (strlen($username) < 3) {
   $error = true;
   $usernameError = "Username must have at least 3 characters.";
  } else if (preg_match("/^(?=.*[a-z])(?=.*[0-9])[a-z0-9][a-z0-9_]{1,6}[a-z0-9]$/", $username)) {
   $error = true;
   $usernameError = "Username must contain alphabets and numbers.";
  } 

【问题讨论】:

  • 这不是str_replace的使用方法。请参阅文档。
  • 我不明白您为什么要使用所有这些代码和用户名。这样做可能弊大于利。
  • 我同意 Funk 的观点,像这样强加用户名字符要求并不是一种常见的做法——我总是喜欢使用 mickmackusa 作为我的网名,但您的过滤器不允许这样做。您还禁止使用大写字母。我最多会使用strlen()ctype_alnum()——不需要正则表达式。或者,如果您需要包含下划线,请使用正则表达式 ~^\w{3,}$~。没有剥离,没有解码。考虑一下。

标签: php


【解决方案1】:

根据你的情况,我建议你使用正则表达式,你可以在你的代码中尝试这个示例来检查它是否正确,希望对你有帮助:

$username = trim('hello 123'); 
$username = strip_tags($username); 
$username = htmlspecialchars($username); 

$usernameError = 'valid';
// username validation 
if (empty($username)) { $error = true; $usernameError = "Please enter your username."; } 
else if (strlen($username) < 3) { 
    $error = true; $usernameError = "Username must have at least 3 characters."; 
} 
else if (preg_match("/\s/", $username)) 
{ 
    $error = true; 
    $usernameError = "Username can't contain whitespace."; 
}
else if (!preg_match("/^[a-z0-9][a-z0-9_]{2,9}$/", $username)) // case maximum 10 characters and only accept "a-z 0-9 and _"
{ 
    $error = true; 
    $usernameError = "Username can only contain alphabet, number and _"; 
}
if (empty($usernameError)) {
    echo 'valid';
}
echo $usernameError;

【讨论】:

  • 运气不好。仍在插入带有空格的用户名
  • 可以给我刚才测试的测试用例吗?
  • 是的。 $username = trim($_POST['username']); $username = strip_tags($username); $username = htmlspecialchars($username); // 用户名验证 if (empty($username)) { $error = true; $usernameError = "请输入您的用户名。"; } else if (strlen($username)
  • 我在我的主要问题中添加了最新的测试用例。您可以在那里看到正确的代码格式。
  • 啊,如果你的完整测试代码和你上面的回复一样,我会更新我的答案
【解决方案2】:

我可能会建议您在这里只使用一个正则表达式:

^(?=.*[a-z])(?=.*[0-9])[a-z0-9][a-z0-9_]{1,6}[a-z0-9]$

您更新的 PHP 代码:

$username = "hello123";
if (preg_match("/^(?=.*[a-z])(?=.*[0-9])[a-z0-9][a-z0-9_]{1,6}[a-z0-9]$/i", $username)) {
    echo "valid username";
}

Demo

如果您想向选择无效用户名的用户提供反馈,您可以一次简单地说明所有要求,而不是按顺序做事。

下面是正则表达式模式的解释:

^                   from the start of the username
    (?=.*[a-z])     lookahead and assert one letter present
    (?=.*[0-9])     lookahead and assert one number present
    [a-z0-9]        one letter or number
    [a-z0-9_]{1,6}  one letter/number/underscore
    [a-z0-9]        one letter or number (total 3-8)
$                   end of the username

【讨论】:

  • 它也不允许空格?
  • 用户名如 admin 345,仍然允许
  • 不,它不允许允许admin 345,查看演示。
  • 对不起蒂姆,我也应该写上面的代码。我正在编辑我的问题,所以你可以看看我是如何使用用户名的。我正在使用修剪,可能这就是为什么它在我的情况下仍然允许空间
  • 我已经回答了你的问题。希望对你有帮助。
猜你喜欢
  • 2021-05-09
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2021-08-16
  • 2016-12-05
  • 1970-01-01
  • 2018-12-31
  • 2012-04-05
相关资源
最近更新 更多