使用电子邮件或电话和密码验证登录名

时间:2019-02-17 12:16:11

标签: asp.net-mvc asp.net-core asp.net-core-mvc

在我的ASP.net核心项目中,我有一个登录页面,其属性为2

public class loginModel
{
    public string EmailOrPhoneNumber { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
}

enter image description here

我只想制作一个可以使用电子邮件或电话号码登录的登录页面,但是我不知道如何验证此属性(验证电子邮件和电话号码)

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以像这样创建一个自定义的validate属性,并将验证逻辑放入其中:

public class EmailOrPhoneNumberAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        string valueAsString = value.ToString();

        const string emailRegex = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
        bool isValidEmail = Regex.IsMatch(valueAsString, emailRegex);

        if (isValidEmail)
        {
            return ValidationResult.Success;
        }

        const string usaPhoneNumbersRegex = @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}";
        bool isValidPhone = Regex.IsMatch(valueAsString, usaPhoneNumbersRegex);

        if (isValidPhone)
        {
            return ValidationResult.Success;
        }

        return new ValidationResult("Invalid email or phone number.");
    }
}

用法将像这样:

public class Person
{
    public string Name { get; set; }

    [EmailOrPhoneNumber]
    public string EmailOrPhoneNumber { get; set; }
}
  • 请注意, ModelState 将自动进行验证。

答案 1 :(得分:1)

  1. 您可以使用正则表达式验证字段

a。定义您的正则表达式(电子邮件正则表达式是我使用的,电话正则表达式来自PhoneAttribute

const string RGX_Email = "^(?("")("".+?(?<!\\)""@)|(([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]))$";
const string RGX_Phone = @"^(\+\s?)?((?<!\+.*)\(\+?\d+([\s\-\.]?\d+)?\)|\d+)([\s\-\.]?(\(\d+([\s\-\.]?\d+)?\)|\d+))*(\s?(x|ext\.?)\s?\d+)?$";

b。然后,您可以使用正则表达式属性进行验证

[RegularExpression($"{RGX_Email}|{RGX_Phone}", ErrorMessage = "Invalid Phone or Email")]
public string EmailOrPhoneNumber { get; set; }
  1. 在服务器端,您可以使用与此类似的代码来处理模型
if(String.IsNullOrEmpty(model.EmailOrPhoneNumber)) 
   return error message;
if(model.EmailOrPhoneNumber.Contains("@"))
   return SignInWithEmail(model);
else return SignInWithPhone(model);