我是初级的,对正则表达式不放心,我正在尝试使用正则表达式和preg_split来做一个带有句子的密码生成器。
除了一件事之外,一切都完成了,例如句子"我有 2 只猫"应该结果为"I'vg2c",但我唯一拥有的是"Ig2c",因为我用空格分开(preg_split("/[s]|/", $string, -1, PREG_SPLIT_NO_EMPTY);
(,并且单词和特殊字符之间确实没有任何空格。
那么是否有任何"简单"选项可以将特殊字符与单词分开并保留它,使用 regex/preg_split 或其他东西? (不知道我说不清楚,对不起我的英语(
这是代码:
session_start();
$string = !empty($_POST['sentence']) ? $_POST['sentence'] : NUll;
function initiales($string)
{
$words = preg_split("/[s]/", $string, -1, PREG_SPLIT_NO_EMPTY);
// $words = explode(" ", $string);
$initiale = '';
foreach($words as $init){
$initiale .= $init{0};
}
return $initiale;
}
?>
What I want :
input: initiales("I've got 21 cats and 1 dog!");
expected_output: "I'vg21ca1d!"
unexpected_output: "Ig2ca1d"
您可以使用
function initiales($string) {
return preg_replace('#Bp{L}p{M}*+|s+#u', '', $string);
}
查看 PHP 演示
模式匹配
Bp{L}p{M}*+
- 任何不在单词开头的字母 + 单词后面的任何变音符号|
- 或s+
- 1 个或多个空格。
u
修饰符用于匹配任何 Unicode 空格,并使B
Unicode 感知。