13

フォーム入力で英語以外の文字を入力できないように制限したいと思います。たとえば、すべての中国語、日本語、キリル文字だけでなく、à、â、ù、û、ü、ô、î、ê などの単一文字も含まれます。これは可能でしょうか?MVC アプリケーションでロケールを設定する必要がありますか?それとも正規表現テキスト ボックスの検証を行うだけですか? 余談ですが、数字やその他の文字を入力できるようにしたいです。これで文字を除外したいだけです。

アドバイスください、よろしくお願いします

4

5 に答える 5

10

これには、Unicode 文字のプロパティとブロックを使用する必要があります。各 Unicode コード ポイントには、いくつかのプロパティが割り当てられています。たとえば、このポイントは文字です。ブロックはコード ポイントの範囲です。

詳細については、次を参照してください。

それらの Unicode プロパティとブロックが書き込まれます\p{Name}。ここで、「名前」はプロパティまたはブロックの名前です。

this のように大文字の "P" の場合\P{Name}は、プロパティ/ブロックの否定です。つまり、他のものと一致します。

たとえば、いくつかのプロパティがあります (短い抜粋のみ):

  • L ==> すべての文字。
  • Lu ==> 文字、大文字
  • Ll ==> 文字、小文字
  • N ==> すべての数字。これには、Nd、Nl、および No のカテゴリが含まれます。
  • Pc ==> 句読点、コネクタ
  • P ==> すべての句読点。これには、Pc、Pd、Ps、Pe、Pi、Pf、Po のカテゴリが含まれます。
  • Sm ==> 記号、数学

たとえば、いくつかのブロックがあります (短い抜粋のみ):

  • 0000 - 007F ==> IsBasicLatin
  • 0400 - 04FF ==> IsCyrillic
  • 1000 - 109F ==> IsMyanmar

ソリューションで使用したもの:

\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óÓè

于 2013-03-13T07:41:18.553 に答える
1

正規表現[\x00-\x80]+または[\u0000-\u0080]+. テストしていませんが、C# でも動作するはずです。

から適応:英語以外の文字に一致する正規表現?

テキストボックスに正規表現検証を使用し、サーバーでも検証できます。

于 2013-03-08T23:43:11.820 に答える
1

これはあなたを助けるかもしれません:=

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");
}

便利なリンク:-

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/84e4f7fa-5fff-427f-8c0e-d478cb38fa12

http://www.c-sharpcorner.com/Forums/Thread/177046/allow-only-20-alphabets-and-numbers-in-textbox-using-reg.aspx

于 2013-03-14T12:59:25.170 に答える
1

ViewModel で正規表現属性を使用して、それを制限できます。

public class MyViewModel
{
    [System.ComponentModel.DataAnnotations.RegularExpression("[a-zA-Z]+")]
    public string MyEntry
    {
       get;
       set;
    }
}
于 2013-03-08T23:07:15.730 に答える
0

これは役立つかもしれませんが、効率的な方法ではありませんが、単純な非正規検証です

foreach (char c in inputTextField)
{
       if ((int)(c) > 127)
          {
             // expection or your logic whatever you want to return
          }

 }
于 2013-03-09T00:48:05.213 に答える