регулярное выражение в вьетнамских символов - PullRequest
5 голосов
/ 29 сентября 2010

У меня есть одна строка, и я хочу удалить любой символ, не указанный ниже:

  • нет в этом списке: АААААААААААААА ưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ

  • не в [a-z 0-9 A-Z]

  • not is: _ и пробел.

Может кто-нибудь помочь мне с этим регулярным выражением в PHP?

Ответы [ 4 ]

6 голосов
/ 29 сентября 2010

Попробуйте это регулярное выражение:

/[^a-z0-9A-Z_ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]/u

Модификатор u заставляет PHP интерпретировать строку шаблона как UTF-8.

Если это не сработает, попробуйте использовать свойства символов Юникода , например \p{L} для букв или escape-последовательность \x{1234} для описания отдельных символов Юникода или диапазонов пользовательских символов:

/[^a-z0-9A-Z_\x{00C0}-\x{00FF}\x{1EA0}-\x{1EFF}]/u
3 голосов
/ 17 сентября 2017

Вышеупомянутые регулярные выражения не содержат ế, также дублируются ă и .
Список правильных вьетнамских символов: àáãạảăắằẳẵặâấầẩẫậèéẹẻẽêềếểễệđìíĩỉịòóõọỏôốồổỗộơớờởỡợùúũụủưứừửữựỳỵỷỹýÀÁÃẠẢĂẮẰẲẴẶÂẤẦẨẪẬÈÉẸẺẼÊỀẾỂỄỆĐÌÍĨỈỊÒÓÕỌỎÔỐỒỔỖỘƠỚỜỞỠỢÙÚŨỤỦƯỨỪỬỮỰỲỴỶỸÝ
Кроме того, не забудьте нормализовать строку в форме NFC (string.normalize('NFC')) перед проверкой с помощью регулярного выражения. Подробнее здесь .

3 голосов
/ 20 декабря 2010

Будь осторожен. Вьетнамские символы Unicode могут быть «разложены» в « объединяющие символы » с одной кодовой точкой для базового символа и одной или несколькими кодовыми точками для дополнительных диакритических знаков, или они могут быть « предварительно составленными » в один Юникод кодовые точки. Объединение диакритических знаков не будет работать должным образом с диапазоном регулярных выражений [], поскольку вы будете сопоставлять их независимо от того, с каким базовым символом они объединяются.

Более старые версии Unicode не содержали полного набора вьетнамских предварительно составленных символов, поэтому ожидайте найти вьетнамский с сочетанием символов в дикой природе. Вы можете преобразовать комбинированные символы в предварительно составленные символы, используя нормализация Unicode форма C, NFC .

1 голос
/ 29 сентября 2010
$newtext = preg_replace('/[^a-z0-9A-Z_[:space:]ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂ ưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]/u','',$text);
...