Проверка ASP.NET MVC Regex с Unicode не поддерживается на стороне клиента
Я хочу проверить заданную строку, которая будет использоваться для сохранения файла с требуемым именем на сервере.
это требует от меня использовать следующий REGEX:^[\p\w\-. ]+$
который прекрасно работает, но только для английских строк.
так что я изменил это так ^[\p{L}\w\-. ]+$
{L}
Модификатор настроен на прием любого символа Юникода.
это модель представления.
[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 (иврит).
Есть ли способы преодолеть это?
2 ответа
В дополнение к предыдущему answer- XRegExp.js, используемому для node.js, для использования в ASP.NET MVC вам нужна версия XRegExp, которая работает как чистый Java-скрипт без модели, я нашел ее здесь:
https://github.com/nagaozen/asp-xtreme-evolution/blob/master/lib/axe/classes/Utilities/xregexp.asp
Код имеет лицензию с открытым исходным кодом. Я попробовал этот код и решение из ответа, и все работает нормально...
Вы можете активировать поддержку Unicode в Javascript RegExp с флагом /u. Он является частью ECMAScript6, но согласно этой таблице он еще не поддерживается в основных браузерах.
Это глупо, но вы можете заменить проверку на стороне клиента пользовательским механизмом регулярных выражений, таким как XRegexp. Он поддерживает символы Unicode. В их примере они используют сокращенную запись \pL
но \p{L}
также поддерживается (в соответствии с этим, глава Unicode Categories).
Я не полностью проверил, и это может иметь побочные эффекты. Но я думаю, что вы можете сделать, чтобы заменить соответствие RegExp в файле 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, но это может быть решением.