展开反向正则表达式以允许1个空格字符

时间:2011-03-30 18:31:47

标签: php regex preg-replace preg-match regex-negation

如何更改下面的图案以允许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 个答案:

答案 0 :(得分:3)

你必须使你的模式更明确。如果最多可以有一个空格,并且必须用字母包围,那么:

$pattern_name = '/^[a-z]+( [a-z]+)?$/i';

答案 1 :(得分:0)

它应该像在括号中添加空格一样简单。

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

答案 2 :(得分:0)

我会反转正则表达式,而不是试图找到无效字符,匹配有效名称(你正在做什么?)。这给了我们这个正则表达式:/[a-zA-Z]+ [a-zA-Z]+/。匹配有效字符,一个空格,然后匹配更多有效字符。