Почему Regex, используемый Microsoft EmailAddressAttribute, принимает значение длиной более 254 символов? - PullRequest
0 голосов
/ 06 июня 2019

Я использую атрибут EmailAddress , чтобы проверить, является ли указанное значение действительным адресом электронной почты.Действительное значение будет сохранено в базе данных.Я задавался вопросом, должен ли я ограничить максимальный размер столбца электронной почты в базе данных, и какой будет правильный размер.Я нашел веб-страницу is_email , в которой указана максимальная длина 254 .

Итак, я проверил регулярное выражение, используемое Microsoft EmailAttribute здесь , ииспользовал этот онлайн-регулятор регулярных выражений для проверки значения, превышающего 254 символа, и, к моему удивлению, это считается совпадением?

Не является ли реализация EmailAddress Microsoft неправильной?Или мне следует объединить атрибут EmailAddress с атрибутом MaxLength?

1 Ответ

1 голос
/ 06 июня 2019

Вы должны использовать MaxLengthAttribute для ограничения размера значения.

EmailAddressAttribute проверяет только то, как значение составлено с помощью регулярного выражения или путем проверки позиции @, которая не должна быть ни первым, ни последним символом.

.NET Core проверяет только положение @, как вы можете видеть на Github .

.NET Framework будет использовать следующее регулярное выражение, или в конечном итоге может проверить положение @ как запасной вариант .

@"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...