【问题标题】:Delete EN space from string on PHP从 PHP 上的字符串中删除 EN 空格
【发布时间】:2017-08-09 18:50:54
【问题描述】:

在我的一段代码中检测到rtrim() 没有删除字符串末尾的空格。

调查,我看到该字符串包含 EN SPACE (U+2002)

$str = 'ANDREWS CAROLE [US]';
// rawurlencode($s) //--> "ANDREWS%20CAROLE%E2%80%82%5BUS%5D"
$pat = "/\[(.*?)\]/";
$str = preg_replace($pat,'',$str); //--> "ANDREWS CAROLE " -> ANDREWS%20CAROLE%E2%80%82"

尝试但失败Filter all types of whitespace in PHP

$new = preg_replace('\p{Zs}$', '', $s)

我不知道$character_mask 这个空间与rtrim 一起使用的价值

【问题讨论】:

  • 如果您使用正则表达式分隔符并添加u 修饰符?使用preg_replace('~\s+$~u', '', $s)
  • 尝试 1-regex 方法 - ideone.com/NfIvdZ。好吧,如果字符串的开头有一个 EN 空格,它将保留。所以,也许,使用你的两步方法可能会更安全。

标签: php regex ascii trim


【解决方案1】:

您可以在模式之前使用[\p{Z}\t]* 来匹配零个或多个可选空格,包括 unicode 空格:

$str = 'ANDREWS CAROLE [US]';
var_dump ( preg_replace('/[\p{Z}\t]*\[(.*?)\]/u', '', $str) );
//=> string(14) "ANDREWS CAROLE"

【讨论】:

  • 最后一个问题.. 有时是$str = 'ANDREWS CAROLE ',最后一个是 EN SPACE。
  • 你可以使用这个:preg_replace('/[\p{Z}\t]*(\[(.*?)\])?$/u', '', $str)
【解决方案2】:

你试试:

<?php

$string = preg_replace('/\s*\[(.*?)\]/u','', 'ANDREWS CAROLE [US]');

var_dump($string);

输出:

string(14) "ANDREWS CAROLE"

【讨论】:

  • 是的,我的建议应该可行。更改为 '/\s*(?:\[(.*?)\])?/u' 以支持删除尾随空格。
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2017-11-20
相关资源
最近更新 更多