改变正则表达式以允许电子邮件地址中的撇号

时间:2018-03-16 16:03:44

标签: regex vb.net validation webforms

在工作中,我们当前的ValidationExpression看起来很糟糕,对我来说非常混乱。我们正在使用WebForms public class YourModel{ private List<String> checkedItems; //other parameters as needed //getters setters } 用户控件,如下所示:

<asp:RegularExpressionValidator>

我需要以某种方式改变它以允许电子邮件中的撇号(<asp:RegularExpressionValidator ID="regEmail" runat="server" ValidationGroup="EditEmails" Text="*" ErrorMessage="Invalid email address." ControlToValidate="txtAdd" Display="Dynamic" ValidationExpression="^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$"/> ),因为目前这个表达式失败了。

需要通过此验证的电子邮件示例:'

我不确定表达式是做什么的,但我确信这可以缩短(也许并不简单,但只要它有效就无所谓)。

任何人都知道我可以使用哪种更好的正则表达式来对付有效的电子邮件并将其考虑在内?谢谢!

编辑:我的问题不同,因为建议的重复问题不适用于VB.Net RegularExpression Validator用户控件。

1 个答案:

答案 0 :(得分:3)

See regex in use here

^([a-z\d]+[_+.-])*[a-z\d']+@(\w+[.-])*\w{1,63}\.[a-z]+$
  • ^在行首处断言位置
  • ([a-z\d]+[_+.-])*多次捕获以下内容
    • [a-z\d]+匹配任何ASCII字母或数字一次或多次(也匹配启用了i标记的大写变体)
    • [_+.-]匹配集合中的任何字符
  • [a-z\d']+匹配任何ASCII字母,数字或撇号一次或多次
  • @按字面意思匹配
  • (\w+[.-])*多次捕获以下内容
    • \w+匹配任何单词字符一次或多次
    • [.-]匹配集合中的任何字符
  • \w{1,63}匹配1到63次之间的任何单词字符
  • \.匹配文字点.
  • [a-z]+匹配任何ASCII字母一次或多次
  • $断言行尾的位置

要以不区分大小写的方式实现上述模式,请添加RegexOptions.IgnoreCase标志。有关详细信息see this post