Php 在当前正则表达式中允许空白

Php 在当前正则表达式中允许空白,php,regex,Php,Regex,我试图在正则表达式中允许空白。由于某些原因,此表达式不允许空白。这是我现在的正则表达式 preg_match( "/^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/", $value ) 可能您尝试匹配的空白不在ascii范围内。(例如,非易碎空间)。因此,您可以尝试添加u修饰符以将\s字符类扩展到所有unicode空白(默认情况下\s仅包含ascii空白) 所以试试这个: preg_match( "/^[A-Za-z0-9?.,-=$@!&%';:)(_\s

我试图在正则表达式中允许空白。由于某些原因,此表达式不允许空白。这是我现在的正则表达式

preg_match( "/^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/", $value )

可能您尝试匹配的空白不在ascii范围内。(例如,非易碎空间)。因此,您可以尝试添加u修饰符以将
\s
字符类扩展到所有unicode空白(默认情况下
\s
仅包含ascii空白)

所以试试这个:

preg_match( "/^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/u", $value )
或者这个:

preg_match( "/(*UCP)(*UTF8)^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/", $value )
注意:我建议您执行巧妙的测试,以确保空格确实是问题所在。 注2:此模式完全匹配相同的内容,但它使用字符范围(查看ascii表)和不区分大小写的修饰符
i

preg_match( "/^[!$-'(),-=?@-Z_\s]+$/ui", $value )

它不匹配空格:

preg_match("/^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/", '   '); // true
preg_match("/^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/", 'a a'); // true
preg_match("/^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/", 'aaa'); // true
preg_match("/^[A-Za-z0-9?.,-=$@!&%';:)(_\s]+$/", 'a*a'); // false

它匹配空格当您将
\s
更改为单个空格时,它是否起作用?您的GREP解析器可能无法将组合识别为字符类中的“所有空格”。
(*UCP)
如果没有UTF模式,则无法工作。实际上,当您使用PHP中的PCRE时,您不需要关心
(*UCP)
。当您指定
u
标志时。如果您未处于UTF模式,则只能在字符类中匹配一个代码单元(UTF-8代码单元=1字节)。@nhahtdh:事实上,我从未注意到这一点,因为在我的测试过程中它总是起作用(出于一个不好的原因)。