フォーム入力で英語以外の文字を入力できないように制限したいと思います。たとえば、すべての中国語、日本語、キリル文字だけでなく、à、â、ù、û、ü、ô、î、ê などの単一文字も含まれます。これは可能でしょうか?MVC アプリケーションでロケールを設定する必要がありますか?それとも正規表現テキスト ボックスの検証を行うだけですか? 余談ですが、数字やその他の文字を入力できるようにしたいです。これで文字を除外したいだけです。
アドバイスください、よろしくお願いします
フォーム入力で英語以外の文字を入力できないように制限したいと思います。たとえば、すべての中国語、日本語、キリル文字だけでなく、à、â、ù、û、ü、ô、î、ê などの単一文字も含まれます。これは可能でしょうか?MVC アプリケーションでロケールを設定する必要がありますか?それとも正規表現テキスト ボックスの検証を行うだけですか? 余談ですが、数字やその他の文字を入力できるようにしたいです。これで文字を除外したいだけです。
アドバイスください、よろしくお願いします
これには、Unicode 文字のプロパティとブロックを使用する必要があります。各 Unicode コード ポイントには、いくつかのプロパティが割り当てられています。たとえば、このポイントは文字です。ブロックはコード ポイントの範囲です。
詳細については、次を参照してください。
それらの Unicode プロパティとブロックが書き込まれます\p{Name}
。ここで、「名前」はプロパティまたはブロックの名前です。
this のように大文字の "P" の場合\P{Name}
は、プロパティ/ブロックの否定です。つまり、他のものと一致します。
たとえば、いくつかのプロパティがあります (短い抜粋のみ):
たとえば、いくつかのブロックがあります (短い抜粋のみ):
ソリューションで使用したもの:
\P{L}
英字以外の任意の文字に一致する文字プロパティです (Letter の場合は「L」)。
\p{IsBasicLatin}
コードポイント 0000 - 007F に一致する Unicode ブロックです
したがって、正規表現は次のようになります。
^[\P{L}\p{IsBasicLatin}]+$
平易な言葉で:
これは、最初から最後までの文字列 (^
および$
) に一致します。(少なくとも 1 つ) 非文字または ASCII テーブルの文字のみがある場合 (ドキュメント ポイント 0000 - 007F)
短い C# テスト メソッド:
string[] myStrings = { "Foobar",
"Foo@bar!\"§$%&/()",
"Föobar",
"fóÓè"
};
Regex reg = new Regex(@"^[\P{L}\p{IsBasicLatin}]+$");
foreach (string str in myStrings) {
Match result = reg.Match(str);
if (result.Success)
Console.Out.WriteLine("matched ==> " + str);
else
Console.Out.WriteLine("failed ==> " + str);
}
Console.ReadLine();
版画:
一致 ==> Foobar
一致 ==> Foo@bar!\"§$%&/()
失敗 ==> Föobar
失敗 ==> fóÓè
正規表現[\x00-\x80]+
または[\u0000-\u0080]+
. テストしていませんが、C# でも動作するはずです。
から適応:英語以外の文字に一致する正規表現?
テキストボックスに正規表現検証を使用し、サーバーでも検証できます。
これはあなたを助けるかもしれません:=
private void Validate(TextBox textBox1)
{
Regex rx = new Regex("[^A-Z|^a-z|^ |^\t]");
if (rx.IsMatch(textBoxControl.Text))
throw new Exception("Your error message");
}
便利なリンク:-
ViewModel で正規表現属性を使用して、それを制限できます。
public class MyViewModel
{
[System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
public string MyEntry
{
get;
set;
}
}
これは役立つかもしれませんが、効率的な方法ではありませんが、単純な非正規検証です
foreach (char c in inputTextField)
{
if ((int)(c) > 127)
{
// expection or your logic whatever you want to return
}
}