使用正则表达式preg_match php 字段验证删除空格



我需要过滤"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";
    }
}

最新更新