C# 在表单提交时验证电子邮件
我有一个验证电子邮件地址的正则表达式控件。它按预期进行验证,只是在控件失去焦点时进行验证。我希望它只在表单提交时生效C# 在表单提交时验证电子邮件,c#,forms,validation,C#,Forms,Validation,我有一个验证电子邮件地址的正则表达式控件。它按预期进行验证,只是在控件失去焦点时进行验证。我希望它只在表单提交时生效 <asp:TextBox ID="txtRegisterEmailAddress" type="email" ValidationGroup="UserProfile" runat="server" CssClass="form-control " Style="text-transform: lowercase" /> <asp:RegularExpres
<asp:TextBox ID="txtRegisterEmailAddress" type="email" ValidationGroup="UserProfile" runat="server" CssClass="form-control " Style="text-transform: lowercase" />
<asp:RegularExpressionValidator ID="revRegisterEmailAddress" runat="server" ControlToValidate="txtRegisterEmailAddress" ErrorMessage="* Invalid Email Address" Display="Dynamic" SetFocusOnError="true" ValidateRequestMode="Disabled" ForeColor="Red" ValidationGroup="UserProfile" ValidationExpression="^(([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]{2,10}(?:[a-z0-9-]*[a-z0-9])?)\s*?,?\s*?)+$" />
<asp:Button runat="server" ID="btnRegister" ClientIDMode="Static" ValidationGroup="UserProfile" CssClass="btn btn-default" OnClick="btnRegister_Click" Text="Register" OnClientClick="DisableReg();" UseSubmitBehavior="false" />
请帮忙
编辑:验证只应在我提交时进行,如果验证失败,则不应提交。当前,它在失去控件焦点时进行验证。我不想重写验证过程,只想在验证时进行更改。您可以创建一个验证电子邮件的方法,该方法可能会返回bool:
public class RegexUtilities
{
bool invalid = false;
public bool IsValidEmail(string strIn)
{
invalid = false;
if (String.IsNullOrEmpty(strIn))
return false;
// Use IdnMapping class to convert Unicode domain names.
try
{
strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException)
{
return false;
}
if (invalid)
return false;
// Return true if strIn is in valid e-mail format.
try
{
return Regex.IsMatch(strIn,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
private string DomainMapper(Match match)
{
// IdnMapping class with default property values.
IdnMapping idn = new IdnMapping();
string domainName = match.Groups[2].Value;
try
{
domainName = idn.GetAscii(domainName);
}
catch (ArgumentException)
{
invalid = true;
}
return match.Groups[1].Value + domainName;
}
}
编辑:已更正缺失代码部分应答
在init上,禁用所有不希望被触发的ValidationGroup“onblur”,并将ValidationEnable用于onclick
另一个选项是,如果希望用户移动到下一个表单元素,但仍然显示表达式有问题,则关闭setFocusOneError。在更正电子邮件地址之前,无法提交表格
从OP更新:
在加载页面上,验证将被禁用。但启用后,无法再次禁用它。我已经添加了下面的代码来在文本框的焦点上再次禁用它,它是特定于文本框的
function TurnOffValidator(ControlToValidate) {
for (var i = 0; i < Page_Validators.length; i++) {
if (Page_Validators[i].controltovalidate === ControlToValidate) {
ValidatorEnable(Page_Validators[i], false);
}
}
}
function TurnOnValidator(ControlToValidate) {
for (var i = 0; i < Page_Validators.length; i++) {
if (Page_Validators[i].controltovalidate === ControlToValidate) {
ValidatorEnable(Page_Validators[i], true);
}
}
}
$('#<%= txtTextbox.ClientID %>').focus(function () {
TurnOffValidator("<%= txtTextbox.ClientID %>");
});
功能关闭验证程序(ControlToValidate){
对于(变量i=0;i
没有实用程序,这不是同一个问题。这完全不同。调用验证方法是btnRegister\u单击中的第一件事,这样可以确保只有通过验证后才会提交。提交后验证就完成了。请在这方面给我指导@Malte。RegularExpressionValidator有什么我需要的属性吗?这里回答-使用ValidatorEnable查看我的答案。这对你有帮助吗?我正试图修复你代码中的错误。。。大约无效的变量。它不存在于DomainMapper
上下文中。请查看MSDN链接。它解释了代码。哦,我知道错误在哪里了isvalid
是一个全局变量。我希望这回答了你的问题:)我同意@Krishna的解决方案。这很好,因为它都是客户端的。
function TurnOffValidator(ControlToValidate) {
for (var i = 0; i < Page_Validators.length; i++) {
if (Page_Validators[i].controltovalidate === ControlToValidate) {
ValidatorEnable(Page_Validators[i], false);
}
}
}
function TurnOnValidator(ControlToValidate) {
for (var i = 0; i < Page_Validators.length; i++) {
if (Page_Validators[i].controltovalidate === ControlToValidate) {
ValidatorEnable(Page_Validators[i], true);
}
}
}
$('#<%= txtTextbox.ClientID %>').focus(function () {
TurnOffValidator("<%= txtTextbox.ClientID %>");
});