我正在开发一个web应用程序,人们可以在该应用程序中用英语和其他语言发布文章(如论坛)。为了从帖子标题中创建漂亮的永久链接,我使用了这样的代码。
PHP:
$ln=preg_replace("/[^A-Za-z0-9[:space:]]/","",$name);
$ln = strtolower($ln);
$ln=str_replace(' ','-',$ln);
这会删除除字母和数字以外的所有字符。但我也想保留其他语言的单词,比如汉语或印地语。因此,它不会将"स्टैक ओवरफ्लो
"剥离为"
"。我还找不到任何REGEX解决方案。
[^'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}
匹配要与
更准确地说。请参阅演示。
https://regex101.com/r/qH1uG3/11