我需要过滤"name"字段,只接受单词或数字之间的一个空格。
我试过了:
if (preg_match('/^[a-zA-Z]+( [a-zA-Z0-9]+)*$/u', $alias)) {
$contr->setData('errorField('.$field.')', 'Just one space per word.');
return false;
}
。这有效,但这不是我要找的,因为它在输入"标记"时会引发错误
我需要一个正则表达式preg_match来检测任何不公正的空格,例如:
- 情况 1:标记 -> 简单地说,返回 OK
- 案例 2.马克 [一个空格] 安东尼 -> OK
- 案例 3.标记 [两个空格或更多] 安东尼 -> NOT OK 包含 2 个空格
- 案例 4.马克 [一个空格] 安东尼 [一个空格] 蒙罗伊 -> OK
- 案例 5.标记 [一个空格] 安东尼 [两个空格或更多] Monroy -> NOT OK 在"Anthony"之后包含 2 个空格
。名称字段也应该接受数字,例如:
马克200 -> 马克安东尼200等
模式可以是:
'#^(?:[\w-]+ ?(*$#'
@Casimir et Hippolyte发布了解决方案。在这种情况下,正确的preg_match是:
if (!preg_match('/^[a-zA-Z]+( [a-zA-Z0-9]+)*$/u', $alias)) {
$contr->setData('errorField('.$field.')', 'Just one space per word.');
return false;
}
就像添加一样简单 !preg_match ...谢谢
代码
在此处查看正在使用的正则表达式
{2,}
注意:上面的正则表达式在开头有一个空格字符(不仅仅是{2,}
(。它只是匹配 2 个或更多空格字符。
更换
此方法将 2+ 空格替换为一个空格。
在此处查看正在使用的代码
$re = '/ {2,}/';
$names = [
'Mark',
'Mark Anthony',
'Mark Anthony Monroe',
'Mark Anthony',
'Mark Anthony Monroy'
];
foreach($names as $name) {
echo preg_replace($re, ' ', $name)."n";
}
火柴
此方法仅识别 2+ 空格。
在此处查看正在使用的代码
$re = '/ {2,}/';
$names = [
'Mark',
'Mark Anthony',
'Mark Anthony Monroe',
'Mark Anthony',
'Mark Anthony Monroy'
];
foreach($names as $name) {
if(preg_match($re, $name)) {
echo $name."n";
}
}