首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用fluent validation ASP.NET核心WebApi进行正则表达式验证

使用fluent validation ASP.NET核心WebApi进行正则表达式验证
EN

Stack Overflow用户
提问于 2019-02-07 18:25:27
回答 2查看 3.9K关注 0票数 3

我正在使用WebApi项目,并使用fluent验证来验证请求。

Userbase Dto。

代码语言:javascript
运行
复制
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.

代码语言:javascript
运行
复制
public class RegisterDto : UserBaseDto
{
}

UserBaseDtoValidator。

代码语言:javascript
运行
复制
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是一个自定义验证器

代码语言:javascript
运行
复制
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位的电话号码。

在这里,我想检查注册请求的有效性。所以,我做了一些类似的事情:

代码语言:javascript
运行
复制
public class RegisterDtoValidator : AbstractValidator<RegisterDto>
{
    public RegisterDtoValidator()
    {
        RuleFor(x => x).SetValidator(new UserBaseDtoValidator());
    }       
}

所有其他验证都工作正常。然而,正则表达式适用于下限,但当我通过超过14位数字时,验证不会被触发。

使用RegularExpressionAttribute时使用相同的表达式

EN

回答 2

Stack Overflow用户

发布于 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$匹配任何恰好包含一个数字的字符串。

您的完整模式应该如下所示:

代码语言:javascript
运行
复制
@"^((?:[0-9]\-?){6,14}[0-9])|((?:[0-9]\x20?){6,14}[0-9])$"
票数 0
EN

Stack Overflow用户

发布于 2021-07-26 13:56:45

尝试使用以下模式:

代码语言:javascript
运行
复制
(^(?:[0-9]\-?){5,13}[0-9]$)|(^(?:[0-9]\x20?){5,13}[0-9]$)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54571174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档