Проверка регулярных выражений с быстрой проверкой ASP.NET Core WebApi - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю с проектом WebApi и использую свободную проверку для подтверждения запроса.

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 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]$)"));
    }
}

Regex принимает от 6 до 14 цифр телефонного номера.

Здесь я хочу проверить правильность запроса на регистрацию.Итак, я сделал что-то вроде:

public class RegisterDtoValidator : AbstractValidator<RegisterDto>
{
    public RegisterDtoValidator()
    {
        RuleFor(x => x).SetValidator(new UserBaseDtoValidator());
    }       
}

Все остальные проверки работают нормально.Тем не менее, регулярное выражение работает для нижнего предела, но когда я пропускаю более 14 цифр, проверка не запускается.

То же выражение работает с RegularExpressionAttribute

1 Ответ

0 голосов
/ 07 февраля 2019

(?:[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])$"
...