【问题标题】:Email validation in Portable/.NETcore (Modern-UI) applicationPortable/.NETcore (Modern-UI) 应用程序中的电子邮件验证
【发布时间】:2023-03-09 15:36:01
【问题描述】:

在便携式应用程序(特别是现代 UI 应用程序)中验证电子邮件的好方法是什么?我不希望重新发明轮子,而且我不太热衷于使用墙壁正则表达式。

我个人的问题是我在服务器端进行了验证,但我想要一些 在客户端进行验证。

以下是针对非便携式应用程序的建议方法: How to: Verify that Strings Are in Valid Email Format 如果省略了DomainMapper(),这可以复制到可移植的上下文中,但是如何在这里最好地解开 DomainMapper? 这是我最喜欢的解决方案,因为在我个人的情况下,我可以接受一些无效的电子邮件地址传递通过我的客户。

另一种方法是从 System.Net.MailAddress 捕获异常,这在可移植上下文中也不支持。 (我认为是MS推荐的方式)

有人知道其他合适的解决方案吗?链接方法(无 DomainMapper)是最好的吗?如果是这样,有没有办法在可移植的上下文中重新实现 DomainMapper?

【问题讨论】:

    标签: c# email-validation modern-ui


    【解决方案1】:

    只需通过转换为 Ascii 字符以更简单的方式处理 Unicode。这样一来,您只需要System.Text.RegularExpressions 即可携带。

    这通过了 MS 页面上的所有给定测试,无法想象它的宽松程度。如果有糟糕的电子邮件通过它没什么大不了的,因为无论如何真正的验证都应该在服务器端。

    public static class RegexUtilities
    {
        /// <summary>
        /// Portible version of http://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx
        /// More permissive validation for client side.
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidEmail(string strIn)
        {
            if (String.IsNullOrEmpty(strIn))    
                return false;
    
            //Replace all unicode chars with ascii "A"
            strIn = Regex.Replace(strIn, "[^\x0d\x0a\x20-\x7e\t]", "A");
    
            // 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;
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2014-06-10
    相关资源
    最近更新 更多