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

时间:2011-01-25 19:46:05

标签: php regex

我是正则表达式的业余爱好者,如何在这个正则表达式中允许空格(无关紧要)?

if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE;

6 个答案:

答案 0 :(得分:19)

if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE;

请注意,我将空格放在连字符之前。如果空格在连字符之后,我将指定从下划线到空格的字符范围。 (问题也可以通过在连字符前面加一个反斜杠来逃避它。)

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

答案 1 :(得分:15)

正则表达式中的\s,如此'/[^A-Za-z0-9_-\s]/'
意思是空间

答案 2 :(得分:2)

不是对你的问题的答案,而是我认为对checking regex expressions有用的网站。它还解释了当您将鼠标悬停在输入字段中时,表达式的每个部分的作用/含义。

答案 3 :(得分:2)

你的问题不清楚。如果$str中的任何字符不是A-Za-z0-9_-,则正则表达式将成功。由于空格不是这些字符之一,因此正则表达式将匹配,整个语句将返回FALSE

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

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

答案 4 :(得分:1)

如果您只需要允许空间,则需要'/ /'

如果你需要允许任何空白字符(空格,制表符,换行符) - 请使用'/ \ s /'

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

答案 5 :(得分:0)

您只需要在否定的字符类中添加文字空白。

使用起来会更简洁:

  • 不区分大小写的标记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