Php 如何在此正则表达式中允许空格?

Php 如何在此正则表达式中允许空格?,php,regex,Php,Regex,我对正则表达式如此业余,如何在正则表达式中允许空格(不管有多少个) if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE; 请注意,我将空格放在连字符之前。如果空格在连字符之后,我将指定从下划线到空格的字符范围。(问题也可以通过在连字符前加反斜杠来避免。) 这是假设“允许”的意思是:此正则表达式用于验证字符串,如果匹配,则不允许该字符串(因此返回FALSE)。因此,否定字符类([^…])中的字符实际上是允许的字符。(这在这个问题上引起了一些

我对正则表达式如此业余,如何在正则表达式中允许空格(不管有多少个)

if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE;
请注意,我将空格放在连字符之前。如果空格在连字符之后,我将指定从下划线到空格的字符范围。(问题也可以通过在连字符前加反斜杠来避免。)


这是假设“允许”的意思是:此正则表达式用于验证字符串,如果匹配,则不允许该字符串(因此
返回FALSE
)。因此,否定字符类(
[^…]
)中的字符实际上是允许的字符。(这在这个问题上引起了一些普遍的混淆。)

如果只需要留出空间,则需要“/”

如果需要允许任何空格字符(空格、制表符、换行符)-请使用“/\s/”


如果你需要在你的模式中添加一个空格(意味着忽略空格)-使用/[^a-Za-z0-9 \-]/

与其说是对你的问题的回答,不如说是一个我觉得有用的站点。它还解释了在输入字段中将鼠标悬停在表达式上时表达式的每个部分的作用/含义。

正则表达式中的
\s
如下所示
'/[^A-Za-z0-9\-\s]/'


意思是你的问题不清楚。如果
$str
中有任何字符不是
A-Za-z0-9.-
,则正则表达式将成功。因为空格不是这些字符之一,所以正则表达式将匹配,并且整个语句返回
FALSE

如果这不是您想要的,并且如果
$str
有任何字符不在
A-Za-z0-9_-
或空格中,您希望正则表达式匹配,则需要将其更改为
A-Za-z0-9_-
(注意下划线和连字符之间的空格)。因此,当字符串中的字符不是
a-Za-z0-9-
时,正则表达式将匹配,语句将返回
FALSE
。如果字符串完全由
A-Za-z0-9
组成,则正则表达式将无法匹配,处理将继续到下一行


编辑:下面是一个示例:如果字符串是
abc123def
,则当前正则表达式将不匹配,并且不会返回
FALSE
。如果字符串是
abc123 def
,则正则表达式将匹配,语句将返回
FALSE
。如果将字符类更改为
A-Za-z0-9
,则正则表达式将无法匹配
abc123def
abc123def
,并且不会返回
FALSE

,您只需在求反的字符类中添加一个文本空格即可

更简洁的做法是使用:

  • 不区分大小写的标志
    i
    ,并省略其中一个字母范围
  • 并将
    [0-9]
    写成
    \d
像这样:

if (preg_match('/[^A-Z0-9_ -]/i', $str)) return FALSE;
但更好的做法是使用表示[A-Za-z0-9](这是您的大多数模式)的
\w
来编写:

if (preg_match('/[^\w -]/', $str)) return FALSE;

此模式表示,如果
$str
包含任何不在
[A-Za-z0-9_-]
中的字符,则将返回
false

正则表达式已经允许空格。我认为这个问题由于双重否定而令人困惑。您希望正则表达式允许空格,还是希望整体条件允许空格?:空格:或\s表示任何空格,或:空白:表示制表符/空格
if (preg_match('/[^\w -]/', $str)) return FALSE;