从php中的字符串中删除俄语字母

时间:2012-08-19 12:07:37

标签: php regex string expression whitelist

如何从PHP中删除字符串中的所有俄语字母?
或者相反,我只想保留。
英文字母,空格,数字和所有符号!@#$%^& *(){}“:?><>〜'”

我怎样才能做到这一点,谢谢。

我想通了,我用###替换了所有的俄罗斯燧石 然后我从开始到结束子串。

$desc = preg_replace('/[а-я]+/iu','###', $desc);

$start = strpos ($desc,'###');
$end =strrpos ($desc,"###");

if($start!==false)
{
    $descStart = substr($desc,0,$start);
    $descEnd = substr($desc,$end+3);
    $desc = $descStart.$descEnd;
}

3 个答案:

答案 0 :(得分:3)

$string = 'тест тест Тест Обязателльно Stackoverflow >!<';
var_dump(preg_replace('/[\x{0410}-\x{042F}]+.*[\x{0410}-\x{042F}]+/iu', '', $string));

输入字符串必须是unicode,输出也是unicode

答案 1 :(得分:2)

以下正则表达式将匹配Cyrrilic脚本中的字母:http://regex101.com/r/sO0uB7(基于Andrey Vorobyev的文本示例)

我认为这就是你所追求的目标。

我不确定i修饰符是否必要。

答案 2 :(得分:0)

我的方法首先将字符串音译为ASCII(以尽可能多地保留信息),然后删除不允许的字符:

$url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
$url = strtolower($url);
$url = preg_replace('~[^-a-z0-9_]+~', '', $url);

您必须在最后扩展正则表达式以匹配您需要的内容。