通过互联网和本网站搜索,我发现了几个关于此事的主题。事实上,如果插入的字符串必须只包含拉丁字母的字符,那么有无数的解决方案,但是当案例需要其他字母的文本时,它会有点棘手。
有什么方法可以在PHP中删除字符串中的所有符号,但保留所有UTF-8字母的实际字母?我已经尝试创建一个包含键盘所有字符的数组,然后使用str_replace或preg_replace删除它们,但后来我发现不同的国家/地区也有不同的键盘,有时包含不同的符号。例如,我的qwerty键盘没有英国键盘可能具有的£
符号。
我知道这是一个奇怪的问题,我只是想知道是否有一个我可能错过的简单解决方案。
非常感谢任何帮助!
修改 确定经过一些更好的和扩展的Google-ing后,我发现以下正则表达式可以正常工作,并保留所有类型字母的所有字母,同时删除所有符号。我在这里分享它,以防其他人需要这样做。
$string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);
答案 0 :(得分:35)
解决方案是这样的:
$string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);
答案 1 :(得分:12)
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
echo $string; // output will be abcdef-g for 'a|"bc!@£de^&$f g'
答案 2 :(得分:1)
试试这个:
<?php
$string = "Remove these characters: £äó";
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
echo $string;
?>
答案 3 :(得分:1)
根据其他答案,为您允许的字符构建正则表达式(例如,从您支持的每个字母表中删除,并删除其他字符。这是Unicode Block Ranges的列表,以获取每个字符的字符值/范围语言 - 这是你需要自己编译的东西。
答案 4 :(得分:1)
可以检查unicode字符和数字,但仅限于PCRE是用。编译的
--enable-unicode-properties
。如果是这种情况,那么您可以使用匹配unicode字母和数字的正则表达式\p{Nl}
。有关PHP中unicode正则表达式的更多信息可以在documentation
修改强> 编辑后问题
要使符号使用\P
而不是\p
,请再次查看我上面链接的PHP文档。