Регулярное выражение, чтобы разрешить набор символов и запретить другим - PullRequest
3 голосов
/ 01 апреля 2009

Я хочу запретить пользователям вводить следующие специальные символы в поле:

œçşÇŞ
ğĞščřŠŘŇĚŽĎŤČňěž
ůŮ
İťı
—¿„”*@
Newline
Carriage return

Еще несколько будут добавлены в этот список, но в конечном итоге у меня будет полный ограниченный список.

Но он может вводить некоторые иностранные символы, такие как äöüÄÖÜÿï и т. Д. В дополнение к буквенно-цифровым символам, обычным специальным символам и т. Д.

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

[^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı — ¿ „ ” * @]+

не похоже на работу.

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

~`!#$%^&()[]{};':",.

вместе с некоторыми иностранными символами.

Ответы [ 5 ]

1 голос
/ 01 апреля 2009

Регулярное выражение может быть построено, чтобы соответствовать неправильным символам, например ::

[œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı]

(я не включил всех персонажей; вы поняли!).

Если какой-либо символ совпадает, это ошибка.

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

[^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı]*
1 голос
/ 01 апреля 2009

Вы МОЖЕТЕ использовать для этого регулярное выражение, но почему бы просто не проверить, есть ли в вашей строке запрещенные символы встроенным методом? Например, в мире .NET вы можете использовать .Contains ().

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

1 голос
/ 01 апреля 2009

Вы не упоминаете, какой «вкус» регулярного выражения вы используете. Работает ли следующее?

\A[^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı — ¿ „ ” * @]+\z
0 голосов
/ 01 апреля 2009

Лучше всего попытаться сопоставить любой символ, который не разрешен, путем отрицания разрешенного набора. Например, если вы хотите разрешить символы от «а» до «z», вы можете сделать следующее.

[^a-z]

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

Если можете, попробуйте использовать встроенные escape-коды класса символов, если они доступны.

Найдите их для Perl RE здесь , ищите "Классы персонажей и другие специальные побеги". Это может позволить вам иметь более короткое выражение, подобное этому.

[^\w\d  ..other individual chars..  ]
0 голосов
/ 01 апреля 2009

Еще несколько будут добавлены в этот список, но у меня будет полный ограниченный список в конце концов.

И у меня нет полного списка разрешенных символов (это будет слишком долго, даже если Я пытаюсь получить его и включаю в него все символы типа ~ `! # $% ^ & () [] {}; ':",. <> Вместе с некоторые иностранные символы)

У вас в конечном итоге будет список запрещенных символов и, возможно, не список разрешенных символов? У вас должен быть либо список всех разрешенных символов, либо список всех запрещенных символов. В противном случае вы не можете сказать, допустим ли ввод. Более того, если у вас есть один из списков, у вас есть второй неявно, если набор символов известен. Тогда просто реализуй более короткий.

Просто угадайте, но если вы используете Юникод, вероятно, будет гораздо больше символов, которые вы хотите запретить, чем разрешить - подумайте обо всех причудливых символах Китая и Японии. Поэтому я думаю, что вам действительно следует составить список разрешенных символов и использовать диапазоны, например a-z , где это возможно.

Если вы действительно хотите создать список запрещенных символов, вам нужно будет создать регулярное выражение, например [^ œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı - ¿„” * @] *. Не забудьте экранировать символы при необходимости и использовать диапазоны, если это возможно.

Добавление такого количества символов в недопустимый список, как [^ œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı - ¿„” * @] +, похоже, не работает.

В вашем списке есть пробелы. Они тоже в твоем коде? Я не уверен, но может быть, это может быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...