5

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

这需要我使用以下正则表达式:^[\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(希伯来语)字符串..

有什么办法可以克服这个吗?

4

2 回答 2

0

您可以使用/u 标志在 Javascript RegExp 中激活 Unicode 支持。它是 ECMAScript6 的一部分,但根据此表,主要浏览器尚不支持它。

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

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

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 发展时,维护起来会很困难,但它可能是一个解决方案。

于 2015-12-23T12:04:42.377 回答
0

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

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

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

于 2016-05-08T20:51:50.057 回答