5

サーバーに必要な名前でファイルを保存するために使用される特定の文字列を検証したいと考えています。

これには、次の 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; }

これは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 の一部ですが、この表によると、主要なブラウザーではまだサポートされていません。

ハックですが、クライアント側の検証を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));

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 に答える