0

我有这样的原始数据

原始数据:

  • 斯里兰卡伊斯提亚宁西
  • 戴安娜·雷迪宁西
  • ENDANG WAHYU PURWANINGSIH
  • THERESIA PUDJI ASTUTIE 纱丽

我需要像这样展示它:

查看数据:

  • SRI I。
  • 戴安娜·W。
  • ENDANG WP
  • 特蕾西亚·帕斯

如何使用 PHP 和正则表达式完成此操作?

4

3 回答 3

1

这是一个简单的解决方案,可以很容易地变成一个函数。

$name = 'THERESIA PUDJI ASTUTIE SARI';

//split the name to a maximum of 2 array values.
list ($first_name, $second_names) = explode(' ', $name, 2);

$second_names = explode(' ', $second_names);

foreach ($second_names as $key => $value) {
    $second_names[$key] = $value[0] . '.';
}

echo $first_name . ' ' . implode(' ', $second_names);
于 2013-02-07T07:05:25.520 回答
1

假设, $var 具有您要转换的字符串。

$var = "THERESIA PUDJI ASTUTIE SARI";

$parts = explode(" ", $var);
$str = $parts[0]." ";
for($i=1; $i<count($parts); $i++){
    $str .= $parts[$i][0].". ";
}

echo $str will give you desired output.
于 2013-02-07T07:19:43.200 回答
0

我不知道“make delimiter”是什么意思,但这是一个基于正则表达式的解决方案:

function shorten_name($name) {
    return preg_replace('/ (\w)\w*/', ' $1.', $name);
}

该模式匹配一​​个空格后跟任意数量的“单词字符”( \w),即字母(区域设置)、数字和下划线,然后仅用空格、第一个字母和一个点替换这个序列。

可能的修改:

  • 如果您只想像示例中那样匹配来自 AZ 的大写字母,请替换\w[A-Z].
  • 如果您想匹配任何不是空格的内容(即“MÜLLER-RIEBENSEE”=>“M.”),请替换\w\S(非空格)。
  • 如果您想使用空格以外的其他字符作为分隔符,请使用字符类和子模式,例如:preg_replace('/([\s-])(\w)\w*/', '$1$2.', $name)将任何空白字符\s或破折号-作为分隔符(即“MÜLLER-RIEBENSEE”=>“M.-R.” )
于 2013-02-07T07:10:09.817 回答