我在使用Web API项目工作,并具有流畅的使用验证,用于验证的请求。
用户群DTO。
public class UserBaseDto
{
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("countryId")]
public int CountryId { get; set; }
[JsonProperty("phoneNumber")]
public string PhoneNumber { get; set; }
}
UserRegister DTO。
public class RegisterDto : UserBaseDto
{
}
UserBaseDtoValidator。
public class UserBaseDtoValidator : AbstractValidator<UserBaseDto>
{
public UserBaseDtoValidator()
{
RuleFor(x => x.Email)
.EmailAddress()
.WithMessage("Please provide valid email");
RuleFor(x => x.PhoneNumber)
.MatchPhoneNumberRule()
.WithMessage("Please provide valid phone number");
}
}
MatchPhoneNumberRule
是一个自定义的验证
public static class CustomValidators
{
public static IRuleBuilderOptions<T, string> MatchPhoneNumberRule<T>(this IRuleBuilder<T, string> ruleBuilder)
{
return ruleBuilder.SetValidator(new RegularExpressionValidator(@"((?:[0-9]\-?){6,14}[0-9]$)|((?:[0-9]\x20?){6,14}[0-9]$)"));
}
}
正则表达式是接受6至14位的电话号码。
在这里,我要检查登记请求验证。所以,我做了一些这样的:
public class RegisterDtoValidator : AbstractValidator<RegisterDto>
{
public RegisterDtoValidator()
{
RuleFor(x => x).SetValidator(new UserBaseDtoValidator());
}
}
其他所有验证工作的罚款。然而,正则表达式正在为下限,但是当我通过超过14位,验证没有得到触发。
同样表达RegularExpressionAttribute
工作
(?:[0-9]\-?){6,14}[0-9]$
指6-14位数加在字符串的末尾一个数字。
就在模式的开始添加^
迹象。 ^(?:[0-9]\-?){6,14}[0-9]$
表示正好6-14位数字和整个字符串的一个数字。
虽然$
与字符串的末尾匹配,[0-9]$
与以数字结尾的任意的字符串匹配。 ^
与字符串的开头匹配,所以^[0-9]
是指以数字开头的字符串。 ^[0-9$
与包含恰好有一个数字的任何字符串相匹配。
你的全模式应该是这样的:
@"^((?:[0-9]\-?){6,14}[0-9])|((?:[0-9]\x20?){6,14}[0-9])$"