在我的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; }
}
我只想制作一个可以使用电子邮件或电话号码登录的登录页面,但是我不知道如何验证此属性(验证电子邮件和电话号码)
有什么建议吗?
答案 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; }
}
答案 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; }
if(String.IsNullOrEmpty(model.EmailOrPhoneNumber))
return error message;
if(model.EmailOrPhoneNumber.Contains("@"))
return SignInWithEmail(model);
else return SignInWithPhone(model);