Проверка 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, но это может быть решением.

Другие вопросы по тегам