【问题标题】:Remove spaces using regex preg_match php field validation使用正则表达式 preg_match php 字段验证删除空格
【发布时间】: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)) {

标签: php regex pcre


【解决方案1】:

代码

See regex in use here

 {2,}

注意:上面的正则表达式开头有一个空格字符(不仅仅是{2,})。它只是匹配 2 个或更多空格字符。

替换

此方法将 2+ 个空格替换为 1 个空格。

See code in use here

$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+ 个空格。

See code in use here

$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";
    }
}

【讨论】:

    【解决方案2】:

    @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 ... 就这么简单 谢谢

    【讨论】:

    • 由于只处理ASCII字符,所以不需要加上u修饰符。您还可以将捕获组更改为非捕获组并使用 i 修饰符来减小代码大小。
    【解决方案3】:

    模式可能是:

    '#^(?:[\w-]+ ?)*$#'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多