Regex, чтобы отрицать специальные норвежские буквы в дружественном URL-адресе - modx - PullRequest
1 голос
/ 05 декабря 2011

Я разрабатываю страницу, используя революцию Modx.Это полный CMS с множеством встроенных функций.Если я создаю страницу в менеджере, она автоматически выдаст мне дружественный URL-адрес, указывающий на эту страницу.

Проблема в том, что не запрещает использование специальных символов, которые есть в Норвегии, æøå (и caseØÅ в верхнем регистре).

В систему встроен шаблон регулярных выражений для удаления URL для большинства плохих символов, но мне нужно выражение для удаления символов stripøå и ÆØÅ.

Шаблон выглядит следующим образом:

/[\0\x0B\t\n\r\f\a&=+%#<>"~:`@\?\[\]\{\}\|\^'\\]/

Может ли кто-нибудь использовать свое магическое знание регулярных выражений, чтобы включить эти 6 букв?Я полностью зелен в регулярном выражении, и простое добавление букв там, похоже, не сработало.

PS: Пожалуйста, не используйте общую фразу "boo, не используйте здесь regex".Шаблон существует по какой-то причине, и я не хочу возиться с ядром, если нам нужно обновить modx (что, скорее всего, произойдет рано или поздно).

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Попробуйте использовать Юникод. Я не знаю modx, но поскольку он написан на php, я надеюсь, что он использует регулярные выражения php preg.

/[\0\x0B\t\n\r\f\a&=+%#<>"~:`@\?\[\]\{\}\|\^'\\\x{00C6}\x{00E6}\x{00C5}\x{00E5}\x{00D8}\x{00F8}]/u

Модификатор u указывает php использовать режим сопоставления Юникод, затем он интерпретирует регулярное выражение как строку Юникода.

\x{00C6} - это символ Unicode Æ

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

См. регулярное выражение.info для использования Unicode в php

Unicode.org для кодовой точки

1 голос
/ 12 декабря 2011

MODX фактически имеет системную настройку, в которой вы можете определить пользовательский класс транслитерации: http://rtfm.modx.com/display/revolution20/friendly_alias_translit_class

Тем не менее, документы немного скудны о том, как вы могли бы реализовать это. Существует существующий пакет, созданный одним из разработчиков ядра, который поддерживает транслитерацию псевдонимов для немецкого и русского языков, но вы можете легко добавить норвежский или любой другой язык в его конфигурацию:

http://modx.com/extras/package/translit

...