Mor*_*lus 5 regex asp.net-mvc validationattribute unobtrusive-validation
我想验证一个给定的字符串,该字符串将用于在服务器中保存具有所需名称的文件。
这要求我使用以下 REGEX:^[\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; }
Run Code Online (Sandbox Code Playgroud)
这是 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">
Run Code Online (Sandbox Code Playgroud)
但客户端验证不接受任何 Unicode(希伯来语)字符串..
有什么方法可以克服这个问题?
您可以使用/u 标志激活 Javascript RegExp 中的 Unicode 支持。它是 ECMAScript6 的一部分,但根据此表,主要浏览器尚不支持它。
这很 hacky,但您可以做的是将客户端验证替换为自定义正则表达式引擎(如XRegexp )。它支持unicode 字符。在他们的示例中,它们使用简写符号\pL,但\p{L}也受支持(根据此,Unicode 类别一章)。
我还没有完全测试过,它可能有副作用。但我认为你可以做的是替换文件 jquery.validate.unobtrusive.js 中的 RegExp 匹配
match = new RegExp(params).exec(value);
return (match && (match.index === 0) && (match[0].length === value.length));
Run Code Online (Sandbox Code Playgroud)
经过
var unicodeWord = XRegExp(params);
return unicodeWord.test(value);
Run Code Online (Sandbox Code Playgroud)
您需要包含这些文件才能使其正常工作:
<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>
Run Code Online (Sandbox Code Playgroud)
当然,当 jquery validate 发展时,维护会很困难,但它可能是一个解决方案。
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |