【发布时间】:2018-06-13 11:25:10
【问题描述】:
我需要过滤“名称”字段以仅接受单词或数字之间的一个空格。
我试过了:
if (preg_match('/^[a-zA-Z]+( [a-zA-Z0-9]+)*$/u', $alias)) {
$contr->setData('errorField('.$field.')', 'Just one space per word.');
return false;
}
...这可行,但它不是我要找的,因为它在输入“Mark”时会引发错误
我需要一个正则表达式 preg_match 来检测任何不必要的空格,例如:
- 案例1:Mark -> 就这么简单,返回OK
- 案例 2. Mark [一个空格] Anthony -> OK
- 案例 3. Mark [两个空格或更多] Anthony -> NOT OK 包含 2 个空格
- 案例 4. Mark [一个空格] Anthony [一个空格] Monroy -> OK
- 案例 5. Mark [一个空格] Anthony [两个空格或更多] Monroy -> NOT OK 在“Anthony”之后包含 2 个空格
...名称字段也应该接受数字,例如:
马克 200 -> 马克安东尼 200 等等...
【问题讨论】:
-
是否要将多个空格转换为一个空格?如果是这样,您可以使用
preg_replace('~\s{1,}~', ' ', $your_string); -
preg_match('/\s{2}/')???要删除使用\s{2,}和preg_replace。 -
否定条件,只使用一个空格:
if (!preg_match('/^[a-zA-Z]+( [a-zA-Z0-9]+)*$/', $alias)) {