我正在使用WebApi项目,并使用fluent验证来验证请求。
Userbase 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 dta.
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]$)"));
}
}
Regex接受6到14位的电话号码。
在这里,我想检查注册请求的有效性。所以,我做了一些类似的事情:
public class RegisterDtoValidator : AbstractValidator<RegisterDto>
{
public RegisterDtoValidator()
{
RuleFor(x => x).SetValidator(new UserBaseDtoValidator());
}
}
所有其他验证都工作正常。然而,正则表达式适用于下限,但当我通过超过14位数字时,验证不会被触发。
使用RegularExpressionAttribute
时使用相同的表达式
发布于 2019-02-07 18:35:03
(?:[0-9]\-?){6,14}[0-9]$
表示6-14位数字加上字符串末尾的一位数字。
只需在pattern的开头添加^
符号。^(?:[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])$"
发布于 2021-07-26 13:56:45
尝试使用以下模式:
(^(?:[0-9]\-?){5,13}[0-9]$)|(^(?:[0-9]\x20?){5,13}[0-9]$)
https://stackoverflow.com/questions/54571174
复制相似问题