我已经尝试了很多像\ n和[[:space:]]这样的东西,但我不知道应该把它放在哪里。
这里有一些代码:
$sPattern = '/^([-_@a-zA-Z0-9])+$/';
提前致谢
答案 0 :(得分:2)
我仍然想知道问题是什么,但让我解释一下: POSIX字符类(如[:space:]
)只能在常规的常见字符类中使用(如[a-z]
)。单独使用它们时,它们看起来像[[:space:]]+
。但是当你将它们与其他范围一起使用时,它们看起来像[a-z[:space:]]
。
现在,您不需要PHP PCRE正则表达式中的[:space:]
,您可以使用速记字符类 \s
。
此外,\w
匹配[a-zA-Z0-9_]
(除非添加/u
修饰符),因此您可以进一步缩短模式:
$sPattern = '/^[-@\w\s]+$/';
此外,必须将+
放在结束方括号旁边,以减少正则表达式引擎捕获功能的开销。 (...)
是多余的,因为您可以使用组0值访问整个匹配。
注意:[:space:]
!= \s
(see 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);