正規表現を使用して、文字列に 0-9、AZ、az、\、/、または - のみが含まれているかどうかを確認しようとしました。私が使用Regex validator = new Regex(@"[0-9a-zA-Z\-/]*");
した文字列は有効です。
チェックは次のようになります。if(!validator.IsMatch(myString))
どうしたの?
私があなたが欲しいものを理解しているなら。あなたのパターンは
new Regex(@"^[0-9a-zA-Z\\\-/]*$");
^
と記号は$
、それぞれ文字列の最初と最後に一致するアンカーです。これらがないと、パターンはそのクラスの任意の文字を含むすべての文字列と一致します。それらを使用すると、そのクラスの文字のみを含む文字列と一致します。
また、バックスラッシュ文字を含めるように指定しましたが、元のパターンは\-
文字クラスに含まれていました。これは、文字クラス内のハイフンのエスケープシーケンスにすぎません。文字クラスにバックスラッシュも含めるには、それを個別に指定する必要があります(エスケープも同様)。したがって、結果の文字クラスには、\\
(円記号)の後に\-
(ハイフン)が続きます。
*
これで、 「ゼロ以上」を意味するため、これは空の文字列と一致します。空でない文字列のみを照合する場合は、次を使用します。
new Regex(@"^[0-9a-zA-Z\\\-/]+$");
「+
1つ以上」を意味します。
+
の代わりに使用*
new Regex(@"[0-9a-zA-Z\-/]+");
フォームの正規表現を書くと
"[some character class]*"
すべての文字列に一致します。すべての文字列には、0 から多数の文字クラスが含まれます。
使いたかったのかもしれません
new Regex(@"[0-9a-zA-Z\-/]+")
文字クラスの 1 から多数を指定します。