有没有办法验证' live'在C#中使用Regex输入字段? '生活'意味着我没有验证完整的字符串,我想在输入字符串时对其进行验证。 例如,我希望我的字符串匹配下一个模式lalala111 @ alalala123,所以我必须检查每个新的字符 - 它是@?如果它的@那么字符串中是否有@?如果是,那么我返回一个null,如果没有,那么我返回char。当然,我必须检查字符 - 是字母还是数字?如果是,那么好吧,如果没有,那就不行了。 我希望你有我的想法。
现在我有了这段代码
private char ValidateEmail(string input, int charIndex, char charToValidate)
{
if (char.IsLetterOrDigit(charToValidate) &&
!(charToValidate >= 'а' && charToValidate <='я') &&
!(charToValidate >= 'А' && charToValidate <= 'Я') ||
charToValidate =='@' ||
"!#$%&'*+-/=?^_`{|}~@.".Contains(charToValidate.ToString()))
{
if ((charToValidate == '@' && input.Contains("@")) ||
(!input.Contains("@") && charIndex>=63) ||
(input.Contains("@") && charIndex >= 192))
return '\0';
}
else
{
return '\0';
}
return char.ToUpper(charToValidate);
}
它只允许带有数字和一些特殊字符的拉丁字母,并且它还允许字符串的第一部分(在@之前)只有64个字母,而第二部分(在@之后)只有128个字母,但是代码看起来很难看,不是吗?所以我想用一个美丽的正则表达式做所有这些检查。
答案 0 :(得分:0)
你必须使用以下代码:
在顶部声明此行:
System.Text.RegularExpressions.Regex remail = new System.Text.RegularExpressions.Regex(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
接下来,在按钮点击或离开事件时,通过以下代码检查
if (textemail.Text != "" && !remail.IsMatch(textemail.Text))
{
errorProvider1.Clear();
textemail.Focus();
errorProvider1.SetError(textemail, "Wrong Email ID");
MessageBox.Show("Wrong Email ID");
textemail.SelectAll();
return;
}
答案 1 :(得分:0)
输入字符后,您希望输入的字符串与以下字符之一匹配:
@
字符。@
个字符,然后是128个或更少的可接受字符。请注意,最后两个子句可以合并为:
@
个字符,然后介于0到128之间,包括可接受的字符。因此,整个要求可以表示为:
@
字符,然后介于0到128之间,包括可接受的字符。&#34;可接受字符的定义&#34;问题根本不清楚。 ValidateEmail
中的代码会检查'a'
到'я'
和'А'
到'Я'
的范围。它还检查"!#$%&'*+-/=?^_
{|}〜@。&#34; .Contains(...)`。
下面的文字假定可接受的字符实际上是指26个字母,大写和小写,加上10个数字。
然后,所需的正则表达式为^\w{1,64}(@\w{0,128})?$
然后,可以使用此正则表达式检查已经验证的输入文本和刚刚输入的字符的串联。
如果希望其他字符被视为可接受,则更改\w
,其中有两个字符。例如,如果要允许下划线(_
)和连字符(-
),则将\w
更改为[\w_-]
。