PHP: 如何使用简单的正则表达式匹配字符串长度?

13

我正在创建一个注册系统,需要使用正则表达式来检查姓名/密码等信息(并且更喜欢使用),目前我已经得到了以下内容:

//Check so numbers aren't first, such as 00foobar
preg_match('/^(?!\d)[a-z0-9]+$/iD',$usrname);
//Just simple check
preg_match('/^[a-zA-Z0-9]+$/',$psword);

但是我必须在IF语句中做一些愚蠢的事情,比如:

if strlen($psword) > 30 || if (strlen($psword) < 4) ....

我该如何在我的两个原始正则表达式语句中实现长度检查呢?这会让我非常高兴。


我并不认为 if 是愚蠢的。它非常易读;你不必在单个正则表达式中完成所有操作。无论如何,请允许密码中使用更多字符。作为一个喜欢使用带有广泛标点符号的安全密码的人,没有什么比网站毫无必要地将密码限制为字母数字更令人沮丧的了。 - bobince
@bobince,30听起来就是个不错的数字,一个“大数”,我正与某人一起开发项目,因此我会将其调高并进行解释。 - oni-kun
2个回答

22

使用\w和\d匹配单词和数字是相同的,但你可能还想包括基本符号例如%!?/ ...等等...

preg_match('/^[\w\d]{4,30}$/',$psword);

{n,v}表示在验证之前至少需要验证最小的n个元素,最多验证v个元素。

例如,A{2,3}将验证AAAAA。您可以查看此处获取更多参考信息。

同样,如果您只想设置模式的最小值,则使用{n,}。例如:

preg_match('/^[\w\d]{4,}$/',$psword);

1
如果您设置密码的最大长度,我建议不少于30个字符。有些人的密码很长,这对他们来说很好,也更安全。 - Tyler Carter
鉴于这是30个字符:“thisais30characterspasswordyay”。我知道我的某个密码比它更长。 - Tyler Carter
@Charchar102,你说得对,但这只是一个简单的游戏,所以我可能会将其保持在40。 - oni-kun
如果你只想设置模式的最小值,那么使用{n,}即可。 - runfalk

5
我认为这个应该可以解决问题: preg_match('/^[a-zA-Z0-9]{4,30}$/',$psword);
注:此处的 $psword 是指密码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接