如何更改下面的图案以允许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,因此其值将变为“太长名”。
答案 0 :(得分:3)
你必须使你的模式更明确。如果最多可以有一个空格,并且必须用字母包围,那么:
$pattern_name = '/^[a-z]+( [a-z]+)?$/i';
答案 1 :(得分:0)
它应该像在括号中添加空格一样简单。
$pattern_name = '/[^a-zA-Z ]/';
答案 2 :(得分:0)
我会反转正则表达式,而不是试图找到无效字符,匹配有效名称(你正在做什么?)。这给了我们这个正则表达式:/[a-zA-Z]+ [a-zA-Z]+/
。匹配有效字符,一个空格,然后匹配更多有效字符。