Regex: отключить символы - PullRequest
       16

Regex: отключить символы

0 голосов
/ 18 января 2011

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

✁ ✂ ✃ ✄ ✆ ✇ ✈ ✉

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

文化 中国 الجزيرة نت

?

Я строюФункция проверки JavaScript и моя настоящая проблема в том, что я не могу использовать:

[a-zA-Z0-9] 

Поскольку это игнорирует множество языков, а не только символы.

Ответы [ 5 ]

5 голосов
/ 18 января 2011

Стандарт Unicode делит все возможные символы на кодовые диаграммы . Каждая кодовая диаграмма содержит связанные символы. Если вы хотите исключить (или включить) только определенные классы символов, вам придется составить подходящий список исключений (или включений). Юникод большой, так что это может быть много работы.

2 голосов
/ 18 января 2011

Это зависит от вашего диалекта регулярных выражений.К сожалению, вероятно, большинство существующих движков JavaScript не поддерживают классы символов Unicode.

В механизмах регулярных выражений, таких как в (недавних) Perl или .Net, можно ссылаться на классы символов Unicode.

\ p {L}: любое письмо от любого языка.\ p {N}: любой символ числа на любом языке (включая, насколько я помню, глифы с номерами на индейском и арабском языках и CJK).

Поскольку Unicode поддерживает составные и разложенные глифы, вы можете столкнуться с некоторыми сложностями:а именно, если существуют только разложенные формы, возможно, вы можете случайно исключить некоторые диакритические знаки в своем шаблоне сопоставления, и вам может понадобиться явно разрешить глифы типа Mark.Вы можете несколько смягчить это, используя, если я правильно помню, строку, которая была нормализована с помощью нормализации kC (только для символов, которые имеют составную форму).В средах, которые хорошо поддерживают Unicode, обычно есть функция, которая позволяет довольно легко нормализовать строки Unicode (по крайней мере, в Java и .Net).

Отредактировано для добавления : Если выВы пошли по этому пути или рассмотрели его, чтобы восстановить здравый смысл, вы можете поэкспериментировать с Плагином Юникода для XRegExp (который потребует от вас зависимости от XRegExp).

2 голосов
/ 18 января 2011

Не совсем.

JavaScript не поддерживает Свойства символов Unicode . Самое близкое, что вы получите - исключить диапазоны по кодовой точке Unicode, как предложил Грег Хьюгилл.

Например, чтобы соответствовать всем символам в Математические символы :

/[\u2190-\u259F]/
1 голос
/ 18 января 2011

Взгляните на Плоскости Юникода .Вы, вероятно, хотите исключить все, кроме плоскостей 0 и 2. После этого это становится уродливым, так как вам придется исключать много плоскости 0 в каждом конкретном случае.

1 голос
/ 18 января 2011

Регулярные выражения JavaScript не имеют встроенной поддержки Unicode.Альтернатива для проверки (или дезинфекции) строки на сайте сервера или использования не-собственной библиотеки регулярных выражений.Хотя я никогда не использовал его, XRegExp является такой библиотекой, и у нее есть Плагин Unicode .

...