Как проверить текстовое поле, чтобы не принимать электронные письма - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть одно поле Company profile: текстовое поле

Если пользователь вводит любой электронный идентификатор в текстовое поле, сообщение об ошибке проверки должно отображать, что пользователь не может вводить электронные адреса в текстовое поле.

Я пробовал следующеекод:

Regex regex = new Regex(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");

string[] values = commentstxt.Text.Trim().Split(' ');
for (int i = 0; i < values.Length; i++)
{
    bool isValid = regex.IsMatch(values[i].ToString().Trim());
    if (isValid)
    {
        //ScriptManager.RegisterStartupScript(this, this.GetType(), "CropImage", "alert('you can not enter email id.');", true);
        //break;
        Response.Write("<script language='javascript'>window.alert('you can not enter email id in company profile.');window.location='addlisting.aspx';</script>");
        break;
    }
    else
    {
        Server.Transfer("addlistingpost.aspx", true);
    }
}

Если пользователь вводит только test@gmail.com, он выдает подтверждающее сообщение о том, что вы не можете ввести emailid в текстовое поле, которое является правильным и остается на странице addlisting.aspx.

Если пользователь вводит, скажем, hello..how are you, он перенаправляет на addlistingpost.aspx, что также правильно.

Проблема возникает, когда пользователь вводит, скажем, hello test@gmail.com how are you, он не выдает сообщение проверки при наличии emailid.в текстовом поле.Здесь я знаю, что он сравнивает только values[0], то есть hello, а затем непосредственно переходит в другую часть.

Как этого добиться?

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

Используемое регулярное выражение совпадает с началом (^) и концом ($) строки.

^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

Просто удалите эти символы, чтобы они соответствовали в любом месте строки.

([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)

Попробуйте этот код:

Regex regex = new Regex(@"([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)");
string text = "hello test@gmail.com how are you";
Console.WriteLine(regex.IsMatch(text));

Он выводит True.

Кстати, это регулярное выражение, которое почти соответствует спецификации RFC 5322:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
0 голосов
/ 21 ноября 2018
Regex regex = new Regex(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
        string[] values = commentstxt.Text.Trim().Split(' ');

        bool isValid = false;


        for (int i = 0; i < values.Length; i++)
        {

            isValid = regex.IsMatch(values[i].ToString().Trim());


            if (isValid)
            {
                //ScriptManager.RegisterStartupScript(this, this.GetType(), "CropImage", "alert('you can not enter email id.');", true);
                //break;
                Response.Write("<script language='javascript'>window.alert('you can not enter email id in company profile.');window.location='addlisting.aspx';</script>");
                break;
            }
            else
            {
                continue;

            }


        }

        if(!isValid)
        {
            Server.Transfer("addlistingpost.aspx", true);
        }
0 голосов
/ 21 ноября 2018

Не могли бы вы попробовать что-то подобное и посмотреть, сработает ли это?:

Regex regex = new Regex(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
    string[] values = commentstxt.Text.Trim().Split(' ');
    bool hasEmail = false;
    foreach (string str in values)
    {
        bool isCurrentValid = regex.IsMatch(str.Trim());
        if (!isValid)
        {
            hasEmail = false;
        } else {
            hasEmail = true;
            break;
        }
    }

    if(hasEmail) {
        Server.Transfer("addlistingpost.aspx", true);
    } 
    else 
    { 
        Response.Write("<script language='javascript'>window.alert('you can not enter email id in company profile.');window.location='addlisting.aspx';</script>");
    }  

Я просто оставил логику проверки всей строки вне цикла.

0 голосов
/ 21 ноября 2018

Вам нужно сканировать весь массив, пока не будет найдена какая-либо ошибка.Вид

Regex regex = new Regex(    @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
string[] values = commentstxt.Text.Trim().Split(' ');
bool isValid = true; // valid word == not email
for (int i = 0; i < values.Length && isValid; i++)
{
    bool isValid = !regex.IsMatch(values[i].ToString().Trim());
    if (!isValid)
    {
        //ScriptManager.RegisterStartupScript(this, this.GetType(), "CropImage", "alert('you can not enter email id.');", true);

        Response.Write("<script language='javascript'>window.alert('you can not enter email id in company profile.');window.location='addlisting.aspx';</script>");

    }
}
if (isValid)
{
    Server.Transfer("addlistingpost.aspx", true);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...