正则表达式为空的空间

时间:2012-01-04 02:14:44

标签: php regex

我正在使用此正则表达式:preg_match('~[^A-Za-z0-9\+\-"]~', $incoming); 我怎样才能在这里添加空格?

一个例子:

word1 word2

我指的是word1和word2之间的空格。我想只允许一个空间。与word1 word2不同(这些词之间有两个空格)。 但是word1 word2 word3应该被允许。 这可能吗?

这是我目前的职能:

$incoming = '"test test test"';
$forbidden_chars = preg_match('~[^A-Za-z0-9\+\-"\s]~', $incoming);


if( /*$string_length < 150 &&*/ !$forbidden_chars){
    $valid_query = TRUE;    
}
else{
    $valid_query = FALSE;
}

$valid_query应该是真的,但它仍然是假的。 为什么呢?

所有例子:

"test" test +test -test test test "test test"将被允许,这也是test test test这不可能: test test(两个词之间有两个空格)

4 个答案:

答案 0 :(得分:2)

如果您尝试匹配以下内容:

  • 领先的单一空间,可选
  • 一句话
  • 尾随单个空格,可选
  • 一次或多次

试试这个:

^ ?(\w+ ?)+$

编辑1:

根据我从你的例子中得出的结论,这是你需要的:

^ ?(?:[\w"+-]+ ?)+$

这将匹配单个空格分隔的1个或多个“单词”。这允许可选的前导和尾随单个空格。

答案 1 :(得分:1)

尝试以下

preg_match('~[^A-Za-z0-9\+\s\-"]~', $incoming);

答案 2 :(得分:0)

只需在方括号内放一个空格。

答案 3 :(得分:0)

你应该简单地在你的方法中处理这个(删除重复的空间)无论输入是什么,只需在处理之前准备输入如下

$incoming= ereg_replace(' +', ' ', $incoming);