Регулярное выражение черного списка для проверки человеческого имени на любом языке

Я использую валидатор Struts 1.3.1 (validation.xml, с использованием маски и регулярного выражения), который не поддерживает регулярные выражения Unicode. (я прочитал и Я пробовал)

Когда это белый список и юникод, это должно быть что-то вроде этого:

^[\p{L}\p{P}\p{Zs}]+

Тем не менее, в моем случае мне нужно отфильтровать все «вспомогательные символы» и исключить только буквы.

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

Я думал об этом, но он явно не охватывает все:

^[^&^>^/^<^\\^*^\?^%^:]$

Большое спасибо!


person Northern Pole    schedule 11.09.2013    source источник
comment
Какие персонажи-помощники? Вы в основном говорите, что хотите сопоставить буквы Юникода?   -  person MDEV    schedule 11.09.2013
comment
Да. Я пытаюсь сопоставить все буквы Юникода, не используя элементы Юникода, которые не поддерживаются в стойках.   -  person Northern Pole    schedule 11.09.2013
comment
Класс символов, который вы написали, на самом деле [^aglmpt/:;\\*?%^&], потому что класс символов рассматривает «строку» как набор символов. Вместо этого используйте отрицательный прогноз, например (?!^&|^>|^/|^<|^\\|^*|^\?|^%|^:)   -  person davide    schedule 11.09.2013
comment
Спасибо за ваш комментарий. Я не понял равенство, которое вы представили Давиде, я также немного отредактировал свое исходное выражение, так как у меня там была опечатка).   -  person Northern Pole    schedule 11.09.2013
comment
Как правило, вам не следует выполнять манипуляции со строками в закодированной в HTML форме значения — сначала проверьте ее необработанную, а затем выполните экранирование HTML. Также у вас есть \p{P} в вашем целевом белом списке, и он включает в себя все символы, которые вы пытаетесь исключить, поэтому я немного смущен.   -  person bobince    schedule 11.09.2013
comment
bobince, я не могу использовать \p{P}, так как валидатор struts не поддерживает это (по крайней мере, в той версии, которую мне нужно использовать). Поэтому я пытаюсь отфильтровать плохие входные данные, вот и все. Я не делаю никаких манипуляций со строками. Я что-то упускаю?   -  person Northern Pole    schedule 11.09.2013
comment
Что ж, похоже, вы пытаетесь исключить &amp;, но у вас не будет ввода с экранированием HTML, если только вы по какой-то причине специально не экранировали его (есть причины, по которым люди иногда экранируют весь ввод с помощью HTML, но это очень плохие причины ). Что касается \p{P}, то он разрешит использовать все символы &>/<\*?% — вы действительно этого хотите?   -  person bobince    schedule 12.09.2013


Ответы (1)


Это решение, которое я выбрал в конце:

Примечание! это синтаксис Struts 1.3.1 для маски валидатора!

^[^&amp;&gt;&lt;\\*?%:!&quot;#$()+,;=@\[\]{}~\^|`\n\t\r/]+$

Запрещение специальных символов, разрешение других.

Это считалось подходом с белым списком, но им пренебрегали, поскольку требовалось доработать (добавление других языков, кроме европейского и японского/китайского):

^[a-zA-Z0-9\-'àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòóÒôÔöÖùúÙûÛüÜçÇ’ñß]+|[一-龠]+|[ぁ-ゔ]+|[ァ-ヴー]+|[々〆〤]+$
person Northern Pole    schedule 12.09.2013