2012-03-28 227 views
3

好的,所以我希望用户能够输入A-Z中的每个字符以及0-9中的每个数字,但我不希望它们输入“特殊字符”。PHP - preg_match()

代码:

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

怎么可能为它检查所有给定的字符,然后检查是否这些相匹配?我试过preg_match_all(),但我并没有真正理解它。

就像用户输入“FaiL65Mal”一样,我希望它允许它继续前进。但是,如果他们进入“故障{]^7(,”我希望它出现一个错误

回答

8

你只需要在你的正则表达式量词:

零个或多个字符*

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

一个或多个字符+

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

你的正则表达式如将只与是字母或数字的一个字符匹配序列Y ou希望以上选项中的一个选项为零个或多个或一个或多个,具体取决于您是要允许还是拒绝空字符串。

+0

谢谢!我希望他们在我看过的YouTube上的教程时间内解释这一点。 – MySQL 2012-03-28 23:32:26

1

你的正则表达式需要改变到

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

对于用户名1首8个字符之间。只要调整8到相应的数字,也许是1

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

+0

我不认为目标是将用户名限制为8个字符。 – jordanm 2012-03-28 23:39:12

+0

我刚才用了8个例子。通常人们对用户名有上限(因为它们存储在数据库中)。这就是为什么我把评论,你可以调整这些值。 – 2012-03-28 23:41:50

0

请保持在月中旬表示,preg_match()preg_*()功能是不可靠的,因为他们在回报0false就失败了,所以简单如果不会抛出错误。

考虑使用CleanRegex

if (pattern(('^[a-zA-Z0-9]{1,8}$')->matches($input)) 
{ 
    // Matches! :) 
}