2012-01-04 6 views
0

Я использую это регулярное выражение: 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-testtest test"test test" должны быть разрешены, то это должно быть возможно test test test это не так: test test (2 Пробелы между словами)

+0

Что такое пустое пространство? Вы имеете в виду пустую строку? – StackOverflowNewbie

+0

Вы хотите найти пустые места или не соответствовать им? Где это "тут?" - в классе символов? –

+0

Ох. Вы пытаетесь сопоставить как можно больше слов, разделенных одним пространством? – StackOverflowNewbie

ответ

2

Если вы пытаетесь соответствовать следующим образом:

  • Leading единое пространство, необязательно
  • ворде
  • Скользящий единое пространство, необязательно
  • один или несколько раз

Попробуйте следующее:

^ ?(\w+ ?)+$ 

EDIT 1:

Исходя из того, что я мог понять из ваших примеров, вот что вам нужно:

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

Это будет соответствовать 1 или более «слова», которые представляют собой единое пространство разделены. Это позволяет использовать дополнительное ведущее и конечное одиночное пространство.

+0

Строки типа '" test "' 'test'' + test' '-test'' test test' '" test test "' должны быть разрешены. Thsi также будет возможно "test test test" (2 руда больше пространства), но НЕ 'test test' (сразу 2 пробела) – user998163

+0

Можете ли вы поместить эти примеры в свой оригинальный пост? Я бы хотел «редактировать», чтобы я мог видеть, где находятся пробелы. Я не вижу примера, где есть ведущее пространство. Это правильно? Как насчет конечных пробелов? – StackOverflowNewbie

+0

вот так: 'preg_match ('[^? (?: [\ W" + -] +?) + $]', $ Incoming); 'correct? Кажется, работает. :) Большое спасибо за ваше терпение! – user998163

0

Просто поставить пробел в квадратных скобках ,

1

попытка ниже

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

Я получил эту ошибку 'Предупреждение: preg_match(): Ошибка компиляции: диапазон не в порядке в символьном классе со смещением 19' – user998163

+0

Позвольте мне снова проверить его –

+0

отредактировал проверку сейчас –

0

вы должны просто справиться с этим (удалением дублированного пространства) внутри вашего метода независимо от входного сигнала, просто подготовить ввод перед обработкой следующего

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