PHP - preg_match()

5

好的,我希望用户能够输入所有A-Z字母和0-9数字,但是我不希望他们输入“特殊字符”。

代码:

if (preg_match("/^[a-zA-Z0-9]$/", $user_name)) {
    #Stuff
}

它如何检查所有给定的字符,然后检查是否匹配?我尝试过 preg_match_all(),但我并不完全理解。

例如,如果用户输入了“FaiL65Mal”,我希望程序能够接受它并继续执行。但如果他们输入“Fail{]^7(,”,我希望程序会出现错误提示。

3个回答

10
你只需要在正则表达式中加入限定符:

零或多个字符 *
/^[a-zA-Z0-9]*$/

一个或多个字符+

/^[a-zA-Z0-9]+$/

你的正则表达式只能匹配一个字符,该字符必须是字母或数字。如果你想允许或拒绝空字符串,可以选择上述选项中的零个或多个、一个或多个。


谢谢!我希望他们在我看过的一小时以上的YouTube教程中解释清楚这个。 - MySQL

1

你的正则表达式需要更改为

/^[a-zA-Z0-9]{1,8}$/

对于用户名长度在1到8个字符之间的情况,只需将8调整为适当的数字,也许还有1。

当前您的表达式匹配一个字符


我认为目标不是将用户名限制在8个字符以内。 - jordanm
我只是以8作为示例。通常,人们在用户名上有上限(例如,它们存储在数据库中)。这就是为什么我放置评论,让您可以调整这些值的原因。 - Ed Heal

0
请注意,preg_match()和其他preg_*()函数并不可靠,因为它们在失败时返回0false,所以简单的if语句无法抛出错误。
考虑使用T-Regx
if (pattern(('^[a-zA-Z0-9]{1,8}$')->matches($input)) 
{
    // Matches! :)
}

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