Проверка адреса электронной почты для ASP.NET

Используется функция библиотеки sqrt для обработки ошибок. См. Документацию glibc: 20.5.4. Отчеты об ошибках с помощью математических функций : набор математических функций errno для совместимости с системами, которые не имеют флагов исключений IEEE754. Связано: glibc's math_error(7) справочная страница.

В качестве оптимизации сначала пытается выполнить квадратный корень с помощью встроенной команды sqrtsd, а затем проверяет результат на себя, используя ucomisd, которая устанавливает флаги следующим образом:

CASE (RESULT) OF
   UNORDERED:    ZF,PF,CF  111;
   GREATER_THAN: ZF,PF,CF  000;
   LESS_THAN:    ZF,PF,CF  001;
   EQUAL:        ZF,PF,CF  100;
ESAC;
blockquote>

В частности, сравнение QNaN с самим собой вернет UNORDERED, что и будет get, если вы попытаетесь взять квадратный корень из отрицательного числа. Это распространяется на ветвь jp. Проверка je - это просто паранойя, проверяющая точное равенство.


Также обратите внимание, что gcc имеет параметр -fno-math-errno , который пожертвует этой обработкой ошибок для скорости. Этот параметр является частью -ffast-math, но может использоваться сам по себе, не позволяя оптимизаторам, изменяющим результат.

sqrtsd сам по себе производит NaN для отрицательных и NaN-входов и устанавливает IEEE754 Неверный флаг. Проверка и ветвь - только , чтобы сохранить семантику errno -setting, на которую не полагается большинство кода.

-fno-math-errno является значением по умолчанию в Darwin (OS X) , где математическая библиотека никогда не устанавливает errno, поэтому функции могут быть встроены без этой проверки.

65
задан Shimmy 13 July 2009 в 08:30
поделиться

6 ответов

Любые теги script, отправленные на веб-форме ASP.NET, заставят Ваш сайт бросать и необработанное исключение.

можно использовать asp regex блок проверки допустимости, чтобы подтвердить вход, просто гарантировать, чтобы Вы обернули свой код позади метода с, если пункт (IsValid) в случае, если Ваш JavaScript обойден. Если Ваш клиент, JavaScript обойден и теги script, будет отправлен на Вашу форму asp.net, asp.net бросит необработанное исключение.

можно использовать что-то как:

<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
119
ответ дан WebDude 24 November 2019 в 15:17
поделиться

Вот основной почтовый блок проверки допустимости, который я просто создал на основе идеи Simon Johnson. Этому просто нужна дополнительная функциональность поиска DNS, добавляемого, если это требуется.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using System.Web.UI;

namespace CompanyName.Library.Web.Controls
{
    [ToolboxData("<{0}:EmailValidator runat=server></{0}:EmailValidator>")]
    public class EmailValidator : BaseValidator
    {

        protected override bool EvaluateIsValid()
        {
            string val = this.GetControlValidationValue(this.ControlToValidate);
            string pattern = @"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$";
            Match match = Regex.Match(val.Trim(), pattern, RegexOptions.IgnoreCase);

            if (match.Success)
                return true;
            else
                return false;
        }

    }
}

Обновление: не используйте исходный Regex. Ищите более новое больше полной выборки.

19
ответ дан John_ 24 November 2019 в 15:17
поделиться

Можно использовать блок проверки допустимости RegularExpression. Свойство ValidationExpression имеет кнопку, которую можно нажать в панели свойства Visual Studio, которая добирается, перечисляет много полезных выражений. Тот, который они используют для адресов электронной почты:

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
7
ответ дан Martin Brown 24 November 2019 в 15:17
поделиться

Проверка этого, это - реальный адрес электронной почты, намного более трудна.

regex для подтверждения синтаксиса корректен, может быть очень длинным (см. http://www.regular-expressions.info/email.html , например). Лучший способ подтвердить адрес электронной почты состоит в том, чтобы послать пользователю по электронной почте и заставить пользователя отвечать путем нажимания на ссылку для проверки этого, они получили электронное письмо (способ, которым больше всего системы регистрации работают).

5
ответ дан RB. 24 November 2019 в 15:17
поделиться

В нашем коде нам наследовали определенный блок проверки допустимости от класса BaseValidator.

Этот класс делает следующее:

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

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

5
ответ дан Simon Johnson 24 November 2019 в 15:17
поделиться

Предотвращение XSS является другим вопросом от проверки входа.

Относительно XSS: Вы не должны пытаться проверить , вводит для XSS или связанного использования. Необходимо предотвратить использование XSS, Внедрение SQL и так далее путем выхода правильно при вставке строк на различный язык, где некоторые символы являются "волшебными", например, при вставке строк в HTML или SQL. Например, имя как O'Reilly является совершенно допустимым входом, но могло вызвать катастрофический отказ или хуже, если вставлено незавершенный в SQL. Вы не можете предотвратить такие проблемы путем проверки входа.

Проверка ввода данных пользователем имеет смысл предотвращать то, чтобы избегать или некорректные данные, например, пользователя, пишущего "asdf" в поле индекса и так далее. Адреса электронной почты Wrt., синтаксис так сложен, хотя, что он не предоставляет много преимущества для проверки его с помощью regex. Просто проверьте, что это содержит.

4
ответ дан JacquesB 24 November 2019 в 15:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: