0

現在、次のコード行を使用しています。

Regex Regex_Alpha = new Regex(@"[a-zA-Z]+('[a-zA-Z])?[a-zA-Z]*");

私がやりたいのは、入力が文字とアポストロフィ記号のみであるという条件でテキストフィールドの入力をフィルタリングすることです(実際には、さらに追加したいのですが、最初にこれを解決しようとしています)。

現在、すべての文字、偶数を受け入れています。

正規表現を理解した上で、次のように独自の表現を作成しようとしました。

Regex Regex_Alpha = new Regex(@"^[a-zA-Z'-"+$);

数値をフィルタリングしますが、アポストロフィ記号は受け入れません。@記号を削除し、バックスラッシュエスケープ文字でアポストロフィをフィルタリングしようとしましたが、それでも使用できません。

文字とアポストロフィのみを受け入れるように入力をフィルタリングするための最良のアプローチは何でしょうか?(これがどのように機能するかを理解したら、残りの記号を実行します)

4

1 に答える 1

1

私がコメントしたように、あなたの最初の正規表現は、「両端に単一のアポストロフィがない文字」でかなり良いショットです。ただし、正規表現は入力全体が一致するかどうかではなく、入力内の任意の一致を検索するため、文字が1 つでもある任意の文字列に一致します。

これは、2 番目の正規表現で行ったことを実行することで修正できます。^先頭に a$を、末尾に a を配置するだけです。これは、式の開始と終了が入力の開始と終了と一致する必要があることを意味するため、入力全体が文字と可能性のあるアポストロフィのみで構成されていることが保証されます。

2 番目の正規表現に関しては、いくつかの問題があります。

  • 文字列リテラルで二重引用符が必要な場合は、 2 つの二重引用符@"..."を付ける必要があります。(現在持っているものはコンパイルすらできないため、これは質問の入力ミスにすぎない可能性があると思います。)
  • 文字クラスを で閉じる必要があります]。そうしないと、[と 内部のすべてが、次々と一致する一連の文字として扱われます。
  • 文字クラスでハイフンが必要な場合は、先頭または末尾に配置する必要があります。そうしないと、「間」のハイフンと間違えられます ( のようにA-Z)。

@"^[a-zA-Z'""-]+$"は、「完全に文字、アポストロフィ、引用符、またはハイフンで構成される任意の文字列」と一致する必要があります。

于 2013-02-27T08:30:51.340 に答える