Написать Регулярное Выражение Валидации

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

<asp:RegularExpressionValidator ID="expEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="valid email address required" ValidationExpression="^([a-zA-Z][w.-]*[a-zA-Z0-9]@[a-zA-Z0-9][w.-]*[a-zA-Z0-9].[a-zA-Z][a-zA-Z.]*[a-zA-Z]){1,70}$"></asp:RegularExpressionValidator>

8 ответов


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


одним из решений (не лучшим) является реализация некоторого регулярного выражения:

^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$

пример:someone@example.com

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


вы не можете сделать что-то вроде

if (txtEmail.Text.Trim().length > 0) then
       validate

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

ваше регулярное выражение довольно сложное,здесь вы должны найти проще. В любом случае, вы можете сделать что-то вроде этого: ^(regex){1}$


вам нужно использовать дополнительный валидатор -asp:RequiredFieldValidator

<asp:RequiredFieldValidator runat="server" ControlToValidate="txtEmail" ErrorMessage="Message!" />

любой из ASP.NET 2.0 валидаторы на основе BaseValidator (за исключением самого RequiredFieldValidator, конечно) не проверяет, что указанное поле пусто.

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

[System.Web.UI.ValidationProperty("PropertyName")]

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

    <asp:RequiredFieldValidator ID="reqEmail" ControlToValidate="txtEmail" runat="server" ErrorMessage="Email address required"></asp:RequiredFieldValidator>

спасибо,


другой выбор-использовать .net CustomValidator, установить его ValidateEmptyText to True, и для проверки адресов электронной почты вы можете использовать функцию JavaScript, которая будет указана в ClientValidationFunction собственность валидатора.


void Page_Load(Object sender, EventArgs e)
{
    string uNameExpr = "^[a-zA-Z](.{1,9})$";
    string phoneExpr = 
        "((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}";

    // Define validation expressions.
    RegExprVal1.ValidationExpression = uNameExpr;
    RegExprVal2.ValidationExpression = phoneExpr;

    ReqFldVal1.Text = "User name is required";
    RegExprVal1.Text = "Must be between 2 to 10 characters";
    RegExprVal2.Text = "Please provide a valid number: (425) 555-0187";
    // ErrorMessages appear in ValidationSummary.
    RegExprVal1.ErrorMessage = "Incorrect UserName format. Name" +
        " can be 2 to 10 characters long";
    ReqFldVal1.ErrorMessage = "User name required";
    RegExprVal2.ErrorMessage = 
        "Please provide a valid number: (000) 000-0000";
}

void OnCmdClick(Object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        ActiveForm = Form2;
    }
}

Это можно сделать с помощью простого использования Regex класс System.Text.RegularExpressions:

private bool ValidateEmail()
{
    string email = txtemail.Text;
    Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
    Match match = regex.Match(email);
    if (match.Success)
       return true;
    else
       return false;
}