绫织梦 发表于 2023-4-5 01:32

PHP正则表达式完全匹配问题?

本帖最后由 Corona 于 2023-4-5 08:31 编辑

if (!preg_match('', $username)) {
            exit('用户名中包含特殊字符!仅允许使用:数字,字母,下划线!');
      }
      if (!preg_match('', $passwd)) {
            exit('密码中包含特殊字符!仅允许使用:数字,字母,下划线!');
      }

PHP初学者一枚……

我写的代码如上,我需要验证用户名与密码中的字符是否符合要求(仅允许出现:数字,大小写字母,下划线)
但是这样写,似乎就算符合要求也会运行到exit()处……

所以想请教一下大佬们,要实现这样的一个功能,需要怎么写?

陌小全 发表于 2023-4-5 01:50

if (!preg_match('/^+$/', $username) || !preg_match('/^+$/', $password)) {
    echo "用户名和密码只能包含数字、大小写字母和下划线";
    exit();
}

涛之雨 发表于 2023-4-5 05:38

本帖最后由 涛之雨 于 2023-4-5 05:43 编辑

要求相同,拼接匹配即可。
此外,数字大小写和下划线使用\w即可匹配
if (!preg_match('/^\w+$/', $username.$password)) {
    echo "用户名和密码只能包含数字、大小写字母和下划线";
    exit(-1);
}
或者判断是否有不符合的字符(更简洁)
if (preg_match('/\W/', $username.$password)) {
    echo "用户名和密码只能包含数字、大小写字母和下划线";
    exit(-1);
}

admib木木 发表于 2023-4-5 12:58

if (!preg_match('/^+$/', $username)) {
    exit('用户名中包含特殊字符!仅允许使用:数字,字母,下划线!');
}
if (!preg_match('/^+$/', $passwd)) {
    exit('密码中包含特殊字符!仅允许使用:数字,字母,下划线!');
}
这里使用了正则表达式 /^+$/ 来匹配用户名和密码。其中:
[*]^ 表示从字符串开头开始匹配;
[*] 匹配数字、大小写字母和下划线;
[*]+ 表示匹配一个或多个前面的字符;
[*]$ 表示匹配到字符串结尾。
因此,整个正则表达式的意思是:匹配只由数字、大小写字母和下划线组成的字符串。如果用户名或密码中包含其他字符,则正则表达式不会匹配成功,进而执行 exit() 函数。

绫织梦 发表于 2023-4-5 16:34

admib木木 发表于 2023-4-5 12:58
if (!preg_match('/^+$/', $username)) {
    exit('用户名中包含特殊 ...

哦哦原来是这样,学到了,感谢解答~
{:301_993:}
页: [1]
查看完整版本: PHP正则表达式完全匹配问题?