我正在开发一个网络应用程序,用户可以用英语和其他语言发布文章(如论坛)。要从帖子标题创建非常永久链接,我使用这样的代码。
PHP:
$ln=preg_replace("/[^A-Za-z0-9[:space:]]/","",$name);
$ln = strtolower($ln);
$ln=str_replace(' ','-',$ln);
除了字母和数字之外,它会删除所有字符。但我也希望用中文或印地语等其他语言保留文字。因此,它不会将“स्टैक ओवरफ्लो
”剥离为“
”。我还没有找到任何REGEX解决方案。
答案 0 :(得分:5)
[^\p{L} 0-9]
\p{L} matches any kind of letter from any language
你可以尝试这个。这将保留其他语言的单词并删除特殊符号。参见演示。
https://regex101.com/r/qH1uG3/8
$re = "/[^\\p{L} 0-9]/m";
$str = "@#\$#\$sadsadस्टैक ओवरफ्लो";
$subst = "";
$result = preg_replace($re, $subst, $str);
或
[^\p{L}\p{Z}\p{N}\p{M}]
\p{L}
匹配来自任何语言的任何字母 \p{Z}
匹配任何类型的空格或不可见分隔符 \p{N}
匹配任何脚本\p{M}
匹配与 更准确。参见演示。