当前位置: 首页 > 知识库问答 >
问题:

使用preg_match的密码参数[重复]

戎高爽
2023-03-14

我试图建立密码参数为8-20字符长,至少一个大写字符,数字,和符号。我已经这样写了代码

  (preg_match ('/^(\W+)(\d+)([A-Z]+)([a-z]+){8,20}$/', $_POST['pass1']) )
W+   one or more symbols (non alpha numeric)
d+   one or more numbers
[A-Z]+  one or more uppercase characters
[a-z]+  one or more lower case characters
{8,20}  string length min 8 max 20

共有1个答案

潘楚
2023-03-14

不要用一个regex来完成所有的事情。如果使用多个正则函数对preg_match进行多次调用,那么它的可维护性、可理解性和以后的更改要容易得多。

$password_is_ok =
    preg_match( '/\W/', $pass ) &&
    preg_match( '/\d/', $pass ) &&
    preg_match( '/[a-z]/', $pass ) &&
    preg_match( '/[A-Z]/', $pass ) &&
    strlen( $pass ) >= 8 &&
    strlen( $pass ) <= 20;

对于下一个必须阅读您的代码的人(可能是您)来说,这比您可以编造的任何单一regex怪物都更容易读懂和理解。

 类似资料:
  • 我有这个功能: 现在我想强制用户至少有1个上翻字母、1个小写字母、1个数字和1个特殊字符。 我有以下问题:

  • 在我的登录PHP文件中,我有这些 在我的注册PHP文件中,我有这个。 现在,基本上我使它哈希密码,并插入自己的数据库注册。确实如此。 然而,它无法核实。这两个结果给出了两个不同的哈希,我不知道我可能做错了什么。我也试着让它再次散列输入并检查数据库中的password_hash,但那不起作用... 正确的使用方法是什么? (另外,$passSign和$userInput是输入字段,它确实获取用户名/

  • 另外,如果是匹配查询,则参数如下所示: 注电子邮件周围没有引号,所以如果您有一个匹配和设置参数查询,您的参数定义如下所示: 有人能解释这种明显的不一致吗? 这将返回未定义的姓氏。

  • 我正在创建一个web应用程序来分配用户对数据库的访问权限。我们获得一张票证,授予用户访问权限,服务台人员选择sql实例,在应用程序上输入用户名和密码以分配访问权限。我的问题是连接字符串都存储在sql数据库中,实例密码使用hashbyte函数加密。 由于密码已加密,我如何通过我的C#asp.net代码连接到数据库。帮助台人员只会选择实例,不会输入登录凭据

  • 问题内容: 我在Linux服务器上安装了一个MySQL,但忘记了它的密码,因此我使用网上找到的方法进行了更改。我所做的如下: 更新查询确实更改了密码,因为它向我显示了受影响的行数和“查询确定”等。 然后我重启了mysql 现在,当我使用新密码登录时 它仍然给我错误 “错误1045(28000):用户’root’@’localhost’的访问被拒绝(使用密码:是)” 有什么我想念的吗? 问题答案:

  • 我的php登录文件有问题。我通过检查电子邮件向数据库询问密码。当我获得这个密码时,我会用用户填写的密码进行检查。 在中,结果总是返回0,但结果应该返回1(密码匹配)。 登录代码: 注册码: Passwd是数据库中的varchar(50)列。