繁体   English   中英

PHP从字符串中删除符号

[英]PHP remove symbols from string

通过互联网和本网站搜索,我发现了几个关于此事的主题。 事实上,如果插入的字符串必须只包含拉丁字母的字符,那么有无数的解决方案,但是当案例需要其他字母的文本时,它会有点棘手。

有没有什么方法可以在PHP中删除字符串中的所有符号,但保留所有UTF-8字母的实际字母? 我已经尝试创建一个包含键盘所有字符的数组,然后使用str_replace或preg_replace删除它们,但后来我发现不同的国家/地区也有不同的键盘,有时包含不同的符号。 例如,我的qwerty键盘没有£键盘可能具有的£符号。

我知道这是一个奇怪的问题,我只是想知道是否有一个我可能错过的简单解决方案。

任何帮助将非常感谢!

编辑:确定经过一些更好和扩展的谷歌后,我发现以下正则表达式适用于我需要的东西,并保留所有类型的字母表的所有字母,同时删除所有符号。 我在这里分享它,以防其他人需要做同样的事情。

$string = preg_replace('/[^\\p{L}\\p{N}\\s]/u', '', $string);

解决方案是: $string = preg_replace('/[^\\p{L}\\p{N}\\s]/u', '', $string);

$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'

尝试这个:

<?php

$string = "Remove these characters: £äó";
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string);
echo $string;
?>

根据其他答案,为你允许的字符构建一个正则表达式(例如,从你支持的每个字母表中删除,并删除其他字符。这是一个Unicode块范围列表,用于获取每种语言的字符值/范围 - 这就是你的意思我需要自己编译。

可以检查unicode字符和数字,但仅限于PCRE编译时
--enable-unicode-properties 如果是这种情况,那么你可以使用匹配unicode字母和数字的正则表达式\\p{Nl} 有关PHP中unicode正则表达式的更多信息可以在文档中找到

编辑:编辑后问题

要获取符号,请使用\\P而不是\\p再次查看我上面链接的PHP文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM