Вопрос

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

Regex ValidHex =
   new Regex("[A-Za-z1234567890_-]+", RegexOptions.IgnoreCase);
if (!ValidHex.IsMatch(e.Text))
{
   e.Handled = true;
}
Это было полезно?

Решение

Вы можете сделать подобное для поддержки символов юникода:

[\p{L}\p{N}_-]+

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

Другие советы

Не храните пароли!

Хэшируйте пароль с помощью функция криптографического хеширования и сравните это.

Это регулярное выражение не особенно хорошее, оно ограничивает возможности пользователей и ничего не применяет (пароли 'a' и 'aaaaaaa' будут передаваться).Название предполагает, что оно было заимствовано из выражения, которое проверяло шестнадцатеричные числа.Вам, по крайней мере, пришлось бы добавить условие минимальной длины (в reg ex или как e.Text.Length > 8).

Более разумное выражение подтвердило бы, что использовался по крайней мере 1 символ из нескольких групп, я откопал это: @"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)" Смотрите здесь.Опять же, добавьте проверку минимальной длины.

В этом примере не рассматривается проблема локализации, он допускает использование нелатинских символов только через '.' и не рассматривает их как удовлетворяющие требованиям [a-z] или [A-Z].

Вы пробовали использовать \w вместо A-za-z?Держу пари, это позволит обойти проблемы с локализацией.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top