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

时间:2015-05-06 20:36:55

标签: php regex

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

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

2 个答案:

答案 0 :(得分:1)

您尝试匹配的空白区域可能不在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 )

答案 1 :(得分:0)

匹配空白:

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