我是正则表达式的业余爱好者,如何在这个正则表达式中允许空格(无关紧要)?
if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE;
答案 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
。