Разверните перевернутое регулярное выражение, чтобы разрешить 1 пробел - PullRequest
1 голос
/ 30 марта 2011

Как я могу изменить шаблон ниже, чтобы разрешить 1 пробел?

$name = 'too long name';
$pattern_name = '/[^a-zA-Z]/';
if (preg_match($pattern_name,$name)) { // remove any non-letter characters
  $name = preg_replace($pattern_name,'',$name);
  $errors['name'] = 'Invalid characters found and removed in name';
}

Использование любого из этих шаблонов не работает:

$pattern_name = '/[^a-zA-Z ?]/';  
$pattern_name = '/[^a-zA-Z] ?/';

Ожидаемый результат соответствует, так какВ $ name существует 2 пробела, таким образом, оператор if должен быть true, а функция replace обновит $ name, чтобы его значение стало «слишком длинным».

Ответы [ 3 ]

3 голосов
/ 30 марта 2011

Вы должны будете сделать ваш шаблон более явным.Если у вас может быть максимум один пробел, и он должен быть окружен буквами, то:

$pattern_name = '/^[a-z]+( [a-z]+)?$/i';
0 голосов
/ 30 марта 2011

Я бы инвертировал регулярное выражение, и вместо того, чтобы пытаться найти недопустимые символы, сопоставить действительные имена (это то, что вы делаете?). Это дает нам это регулярное выражение: /[a-zA-Z]+ [a-zA-Z]+/. Совпадают с действительными символами, одним пробелом, а затем с более действительными символами.

0 голосов
/ 30 марта 2011

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

$pattern_name = '/[^a-zA-Z ]/';
...