【问题标题】:Looking For a Specific Filter PHP寻找特定的过滤器 PHP
【发布时间】:2012-02-06 12:30:18
【问题描述】:

我正在尝试验证用户的用户名。我希望它能够包含字母和数字,不超过 30 个字符。

是否有内置的 PHP 过滤器可以为我完成此任务?那些手动正则表达式的东西伤害了我的大脑......

【问题讨论】:

  • 不幸的是,正则表达式是您描述的工作的最佳工具......像regexbuddy.com 这样的东西是了解它们的好工具!我将使用/^[a-z0-9]{1,30}$/i 作为最好的正则表达式!
  • LOL ...所有的答案都是完全相同的想法!
  • @JonahBishop 他们都以某种方式存在缺陷。 *悲伤的脸*
  • @salathe 我更新了我的解决方案以采用这里的一些建议。它在某些方面仍然有缺陷吗?如果有,怎么做?

标签: php filter validation


【解决方案1】:

没有内置过滤器。

您可能需要考虑learning regular expressions,它们并没有那么那么糟糕。

$valid = (strlen($username) <= 30 && preg_match("#^[a-z0-9A-Z]+$#", $username));

【讨论】:

  • 考虑在你的正则表达式中使用量词而不是使用strlen()
【解决方案2】:

这个特定的东西没有过滤器,但是它可以工作并且有一个简单的正则表达式:

function isValidUsername($username) {
    return (strlen($username) <= 30) && (preg_match("/^[a-z0-9]+$/i", $username) == 1);
}

【讨论】:

    【解决方案3】:

    PHP 没有内置任何东西来满足这些要求。不过,这是您需要的正则表达式:

    $valid = (bool)preg_match('/^[a-zA-Z0-9]{1,30}$/', $username);
    

    我知道您没有要求对设计进行评论,但如果用户名真的是必需品,请仔细考虑。如果没有,请考虑改用电子邮件地址,因为它们对用户更友好,而且您很可能会向用户询问该信息。

    【讨论】:

    • 所以我想说... if ($_POST['username'] == $valid) { echo "the username is valid" .. . ... .然后它会变成 $username?
    • @Depetrify:不,如果您要检查的用户名在 $_POST['username'] 中,您可以在上面的代码中使用它而不是 $username。那么$valid 将是TRUEFALSE,你可以从那里开始。
    【解决方案4】:

    这是一个应该做的函数。我建议花一些时间学习正则表达式的工作原理。它们是程序员工具箱中最强大(也是最有用)的工具之一。

    更新:使用上面评论中的分隔符建议,并稍微简化我的功能:

    更新 2: 添加 /D 模式修饰符以确保 $ 防止与 \n 匹配。

    function isValidUsername($name)
    {
      return preg_match("/^[a-zA-Z0-9]{1,30}$/D", $name);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2013-09-07
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多