【问题标题】:ASP.NET MVC Regex validation with Unicode is not supported on client side validation客户端验证不支持使用 Unicode 的 ASP.NET MVC 正则表达式验证
【发布时间】:2016-03-29 11:26:43
【问题描述】:

我想验证一个给定的字符串,该字符串将用于在服务器中保存具有所需名称的文件。

这需要我使用以下正则表达式:^[\p\w\-. ]+$ 这很好用,但只适用于英文字符串。

所以我像这样修改了^[\p{L}\w\-. ]+$ {L} 修饰符设置为接受任何 Unicode 字符。

这是视图模型。

[Required(ErrorMessageResourceType = typeof(FilesRepositoryStrings), ErrorMessageResourceName = "EnterTheNamePlease")]
[Display(ResourceType = typeof(FilesRepositoryStrings), Name = "FileNameInputLabel")]
[RegularExpression(@"^[\p{L}\w\-. ]+$", ErrorMessage = @"The file name can only contain letters, numbers and characters -_.")]
public string FileName { get; set; }

这是 html 渲染

<input class="form-control" data-val="true"
data-val-regex="The file name can only contain letters, numbers and characters -_." 
data-val-regex-pattern="^[\p{L}\w\-. ]+$" 
data-val-required="הזן את השם בבקשה" 
id="UploadFileModel_FileName" 
name="UploadFileModel.FileName" 
onkeyup="$('#EnterTheNamePlease').attr('hidden', true);" 
type="text" value="" 
aria-required="true" aria-invalid="true">

但客户端验证不接受任何 Unicode(希伯来语)字符串..

有什么办法可以克服吗?

【问题讨论】:

    标签: regex asp.net-mvc unobtrusive-validation validationattribute


    【解决方案1】:

    您可以使用/u flag 在 Javascript RegExp 中激活 Unicode 支持。它是 ECMAScript6 的一部分,但据 this table 称,主要浏览器尚不支持它。

    这很 hacky,但您可以做的是用自定义正则表达式引擎替换客户端验证,例如 XRegexp。它支持unicode characters。在他们的示例中,他们使用速记符号\pL,但也支持\p{L}(根据this, chapter Unicode Categories)。

    我还没有完全测试过,它可能有副作用。但我认为你可以做的是替换文件 jquery.validate.unobtrusive.js 中的 RegExp 匹配

    match = new RegExp(params).exec(value);
    return (match && (match.index === 0) && (match[0].length === value.length));
    

    通过

    var unicodeWord = XRegExp(params);
    return unicodeWord.test(value);
    

    您需要包含这些文件才能使其工作:

    <script src="src/xregexp.js"></script>
    <script src="src/addons/unicode-base.js"></script>
    <script src="src/addons/unicode-categories.js"></script>
    <script src="src/addons/unicode-scripts.js"></script>
    

    当然,当 jquery validate 发展时,维护起来会很困难,但它可能是一个解决方案。

    【讨论】:

      【解决方案2】:

      除了上一个答案—— XRegExp.js 用于 node.js,要在 ASP.NET MVC 中使用,您需要作为纯 java 脚本运行的 XRegExp 版本,没有模型,我在这里找到了它:

      https://github.com/nagaozen/asp-xtreme-evolution/blob/master/lib/axe/classes/Utilities/xregexp.asp

      代码具有开源许可证。 我从答案中尝试了这段代码和解决方案,一切正常......

      【讨论】:

      • 您应该评论“以前的答案”,而不是创建一个新的答案以获得更多信息。
      • 我是 stackoverflow 的新手,没有权限发布 cmets。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 2010-09-14
      • 2014-07-21
      相关资源
      最近更新 更多