RegularExpression Validation属性无法正常工作

时间:2018-03-29 13:00:45

标签: c# regex validation asp.net-core

我想验证viewmodel中的属性以匹配正则表达式。

视图模型:

using System.ComponentModel.DataAnnotations;

namespace ProjectName.ViewModels
{
    public class ViewModel
    {
        [Required(ErrorMessage = "error message.")]
        [RegularExpression(@"[a-zA-Z0-9][/\\]$/img", ErrorMessage = "End with '/' or '\\' character.")]
        public string FilePath { get; set; }

        public ViewModel()
        {

        }
    }
}

查看:

@model ProjectName.ViewModels.ViewModel
<form asp-action="EditPath" asp-controller="Files" id="EditFilePathForm">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="col-md-5">
        <div class="form-group">
            <div class="col-md-12">
                <label asp-for="FilePath" class="control-label"></label>
            </div>
            <div class="col-md-8">
                <input asp-for="FilePath" class="form-control"/>
                <span asp-validation-for="FilePath" class="text-danger"></span>
            </div>
            <div class="col-md-4">
                <p>@Model.FileName</p>
            </div>
        </div>
    </div>

    <div class="col-md-12 text-right">
        <hr />
        <button type="button" class="btn btn-default" id="cancelEditFilePathModal" data-dismiss="modal">Annuleren</button>
        <input type="submit" class="btn btn-primary" id="Submit" value="Opslaan"/>
    </div>
</form>

正则表达式应检查FilePath是否以字母数字字符结尾,后跟/\

Link to Regex on Regex101.com

在Regex101.com上,这似乎工作正常。 但是,当我在我的应用程序中测试它时,似乎永远不会匹配表达式,并且错误消息不断出现。

我在这里俯瞰什么?

2 个答案:

答案 0 :(得分:4)

RegularExpressionAttribute需要完整的刺激匹配:

  

// We are looking for an exact match, not just a search hit. This matches what
     // the RegularExpressionValidator control does
     return (m.Success && m.Index == 0 && m.Length == stringValue.Length);

因此,您需要删除标记(这是一个拼写错误)并在模式之前使用^.*

@"^.*[a-zA-Z0-9][/\\]$"

答案 1 :(得分:1)

使用了Regex101 [a-zA-Z0-9][/\\]$,代码@"[a-zA-Z0-9][/\\]$/img"

  

[RegularExpression]:验证数据是否与指定的正则表达式匹配

所以你必须反转正则表达式

.*[^/\\]$

请参阅example

注意

实际上[a-zA-Z0-9][/\\]$/img是无效的正则表达式,因为/未在img前面转义