我有一个模式,我想允许字母数字和空间特别是空间

时间:2016-01-22 11:23:33

标签: php regex preg-match pcre

我已经尝试了很多像\ n和[[:space:]]这样的东西,但我不知道应该把它放在哪里。

这里有一些代码:

 $sPattern = '/^([-_@a-zA-Z0-9])+$/';

提前致谢

2 个答案:

答案 0 :(得分:2)

我仍然想知道问题是什么,但让我解释一下: POSIX字符类(如[:space:])只能在常规的常见字符类中使用(如[a-z])。单独使用它们时,它们看起来像[[:space:]]+。但是当你将它们与其他范围一起使用时,它们看起来像[a-z[:space:]]

现在,您不需要PHP PCRE正则表达式中的[:space:],您可以使用速记字符类 \s

此外,\w匹配[a-zA-Z0-9_]除非添加/u修饰符),因此您可以进一步缩短模式:

$sPattern = '/^[-@\w\s]+$/';

此外,必须将+放在结束方括号旁边,以减少正则表达式引擎捕获功能的开销。 (...)是多余的,因为您可以使用组0值访问整个匹配。

PHP中的

注意[:space:]!= \ssee reference)。

  

space字符为HT(9),LF(10),VT(11),FF(12),{{1 (13)和CR(32)。请注意,此列表包含 字符(代码11)。这使VT[:space]:不同,后者不包括\s(对于Perl兼容性)。

如果您需要匹配VT,请使用VT

答案 1 :(得分:1)

这显然是计算机的问题,所以我使用了别的东西:

    $sPattern = "/^([-_@\\w\\f])+$/";

    $value = str_replace(' ', '', $value);