PHP Regex для ударных символов - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь отфильтровать переменную, разрешив алфавитно-цифровые символы, пробелы, символы ударения и одинарные кавычки, и заменяю остаток на пробел, поэтому строка выглядит так:

replaceé ñ une otage%?vendredi 23 mars lors de l'attaque

должен выдавать:

заменять без перерыва в работе vendredi 23 mars lors de l'attaque

но в результате я получаю вывод:

replaceé ñ une otage vendredi 23 Mars lors de l

, пожалуйста, помогите, это мой код

$whitelist = "/[^a-zA-Z0-9а-àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý',. ]/";

$descreption =  preg_replace($whitelist, ' ', $ds);
}else{
    $errors = self::DESCREPTION_ERROR;
    return false;
}

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Один из способов справиться с диапазоном акцентированных символов - использовать класс POSIX [:alnum:], который в PHP вместе с модификатором u будет соответствовать всем им. Затем его можно поместить в класс отрицанных символов с другими символами, которые вы хотите сохранить, чтобы разрешить удаление других символов:

$string = 'substitué à une otage % ? vendredi 23 mars lors de l’attaque';
echo preg_replace("/[^[:alnum:]'’,.]/u", ' ', $string);

Выход:

substitué à une otage vendredi 23 mars lors de l’attaque

Как отмечалось в комментариях, - это не то же самое, что ', поэтому его также необходимо добавить к набору символов, который вы хотите сохранить.

Демонстрация на 3v4l.org

0 голосов
/ 03 января 2019

Вы можете взглянуть на Свойства символов Unicode .

Сводка моих изменений:

  • используйте \p{L}, чтобы соответствовать всем буквам
  • экранирование (\-)
  • поддержка пишущей машинки (') и типографских () апострофов

Вот результат:

$whitelist = '/[^\p{L}0-9\-\'’,. ]/u';

Возможно, есть место для дальнейшего улучшения.Наконец, не забудьте добавить модификатор u !

0 голосов
/ 03 января 2019

Ваше регулярное выражение неисправно.Часть а-à выдает ошибку Character range is out of order - я думаю, - был добавлен туда по ошибке ...

Тогда небольшой намек: не '

[^a-zA-Z0-9àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý'’,. ] 

должно работать нормально.

Кроме того, если вы работаете с Regex, такие инструменты, как RegExr или regex101 , действительно полезны.

...