用流利的验证ASP.NET核心的WebAPI正则表达式验证

问题描述 投票:0回答:1

我在使用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工作

c# regex asp.net-core asp.net-core-webapi fluentvalidation
1个回答
0
投票

(?:[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])$"
© www.soinside.com 2019 - 2024. All rights reserved.