PHP preg_replace только латинские символы - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно отфильтровать строку, когда я создаю XML для электронных счетов для Италии.

От конкретных принимаются только:

String1000LatinType
"[\p{IsBasicLatin}\p{IsLatin-1Supplement}]{1,1000}"

Я не в курсе диапазона, но ядумаю:

a-z, A-Z, 0-9, с акцентом как: à ò ù è é ì, ç и такими символами, как: , . _ - : ; ' и пробелом

Я бы хотелисключить все остальные символы непосредственно с клавиатуры, например: "£$%&/()=?^°§*+\|/<> и tab

Я пытался конвертировать с помощью этой функции, но я не гуру с регулярным выражением:

function sanitize($tag) {

$newtag = preg_replace ("/[\p{Latin}A-Z0-9a-z\-\_\.\,\:\;' ]/", "", $tag);

return $newtag;

}

$tag = "Qwerty 12345 £$%&/()=?^ èéòàùì +*°ç.,-_<>\/l'èok .,;:";

var_dump(sanitize($tag));

Может кто-нибудь помочья?

Я хотел бы получить:

Qwerty 12345  èéòàùì ç.,-_l'èok .,;:

1 Ответ

0 голосов
/ 22 февраля 2019

Похоже, PHP не поддерживает \p{IsLatin-1Supplement}.Однако вы можете использовать диапазон кодовых точек Unicode в своем регулярном выражении.Как говорит Википедия :

Этот блок варьируется от U+0080 до U+00FF

\p{IsBasicLatin} соответствуетсимволы от U+0000 до U+007F.Таким образом, вам нужно сопоставить любой символ, кроме символа, с кодовыми точками от \x00 до \xFF + всеми знаками препинания и символами, за исключением специальных символов:

preg_replace('~(?:[^\x00-\xFF]|(?![.,_\'-])[\p{P}\p{S}])~u', '', $tag)

См. regex demo .

Подробности

  • (?: - запуск группы без захвата
    • [^\x00-\xFF]- любой символ, кроме символа в диапазоне кодовой точки Unicode от \x00 до \xFF
    • | - или
    • (?![.,_\'-])[\p{P}\p{S}]) - любая пунктуация (\p{P}) или символ(\p{S}), которые не равны символам в списке .,_'-.
  • )+ - конец группы, повторите это 1 или более раз.

См. PHP демо :

function sanitize($tag) {
 $newtag = preg_replace('~(?:[^\x00-\xFF]|(?![.,_\'-])[\p{P}\p{S}])+~u', '', $tag);
 return $newtag;
} 
$tag = "Qwerty 12345 £$%&/()=?^ èéòàùì +*°ç.,-_<>\/l'èok .,;:";
var_dump(sanitize($tag));
// => Qwerty 12345  èéòàùì ç.,-_l'èok .,;:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...