PHP正则表达式验证

PHP正则表达式验证,php,regex,validation,Php,Regex,Validation,我需要使用PHP来验证用户名,我只希望它们使用字母数字,以及破折号(-)、下划线()和句点() 是这样吗 preg_match("/[A-Za-z0-9_-.]/",$text); 不,不是(不过,我想你已经怀疑了,否则你就不会问了。) 定义字符组时,破折号用于定义范围,正如您所做的那样a-Z表示a和Z之间的所有字符。但是,您也可以使用。,表示u和之间的所有字符。(我不知道那是什么,但你可以在ASCII表中查找)。要允许在字符组中匹配破折号,必须将破折号放置在不能解释为字符范围的任何位置,通常

我需要使用PHP来验证用户名,我只希望它们使用字母数字,以及破折号(
-
)、下划线(
)和句点(

是这样吗

preg_match("/[A-Za-z0-9_-.]/",$text);
不,不是(不过,我想你已经怀疑了,否则你就不会问了。)

定义字符组时,破折号用于定义范围,正如您所做的那样
a-Z
表示a和Z之间的所有字符。但是,您也可以使用
,表示u和之间的所有字符。(我不知道那是什么,但你可以在ASCII表中查找)。要允许在字符组中匹配破折号,必须将破折号放置在不能解释为字符范围的任何位置,通常是第一个或最后一个字符范围(但有关其他创造性方式,请参见注释;)

正如注释中指出的,您还需要锚定它,以确保匹配范围之外没有字符(这就是匹配字符串开头的^和匹配字符串结尾的$的作用)。您还需要确保可以匹配多个字符。因此,在其中添加一个+(或者*如果您想允许空字符串),表示一个或多个字符

HTH

不,不是(尽管,我想你已经怀疑了,否则你不会问的。)

定义字符组时,破折号用于定义范围,正如您所做的那样
a-Z
表示a和Z之间的所有字符。但是,您也可以使用
,表示u和之间的所有字符。(我不知道那是什么,但你可以在ASCII表中查找)。要允许在字符组中匹配破折号,必须将破折号放置在不能解释为字符范围的任何位置,通常是第一个或最后一个字符范围(但有关其他创造性方式,请参见注释;)

正如注释中指出的,您还需要锚定它,以确保匹配范围之外没有字符(这就是匹配字符串开头的^和匹配字符串结尾的$的作用)。您还需要确保可以匹配多个字符。因此,在其中添加一个+(或者*如果您想允许空字符串),表示一个或多个字符


HTH

您需要在开头和结尾锚定模式,现在只要只有一个有效字符,其余字符无效,它就会匹配$text。使用以下命令:

if (preg_match('/^[\w.-]+$/', $text)) { /* valid */ }
\w与[0-9A-Za-z_]是同一事物。另一种方法是反转模式,搜索任何无效字符,并检查所有字符是否匹配:

if (!preg_match('/[^\w.-]/', $text)) { /* valid */ }

您需要将模式锚定在开头和结尾,现在它将匹配$text,只要只有一个有效字符,其余字符无效。使用以下命令:

if (preg_match('/^[\w.-]+$/', $text)) { /* valid */ }
\w与[0-9A-Za-z_]是同一事物。另一种方法是反转模式,搜索任何无效字符,并检查所有字符是否匹配:

if (!preg_match('/[^\w.-]/', $text)) { /* valid */ }

嗨,布伦丹-找出它是否正确的最简单方法是实际测试它。嗨,布伦丹-找出它是否正确的最简单方法是实际测试它。破折号也可以转义:
/[A-Za-z0-9\-.]/
,或者放在开头:
/[-A-Za-z0-9\.]/
,甚至在两个范围之间:
/[A-Z-A-z0-9\.]/
为了匹配文本
-
。regex可以简单地写为/[\w.-]/@roe,但并不完全正确:我说的是“在范围之间”,但就在范围之后就足够了:
[a-Za-z0-9-.]
就可以了。它还需要被锚定,现在,只要$text有一个有效字符,其余字符无效,它就会匹配。@newacct:not quite-\w还将匹配重音字符和其他特殊字符(Äáß等)。破折号也可以转义:
/[A-Za-z0-9_ \-.]/
,或放在起始处:
/[-A-Za-z0-9_223;]/
,甚至在两个范围之间:
/[A-Z-A-z0-9.]/
以匹配文本
-
。正则表达式可以简单地写成/[\w.-]/@roe,但并不完全正确:我说的是“在范围之间”,但就在范围之后就足够了:
[A-Za-z0-9-.]
就可以了。它还需要被锚定,只要$text有一个有效字符,其余字符无效,它就可以匹配。@newacct:not quite-\w还将匹配重音字符和其他特殊字符(Äáß等)。