文字列に文字が含まれているかどうかを確認しようとしましたが、「\」と「^」は許可されていません。
Regex nameValidator = new Regex("^[\\^]+$");
これは機能しません:
!nameValidator.IsMatch(myString)
なんで?
文字列に文字が含まれているかどうかを確認しようとしましたが、「\」と「^」は許可されていません。
Regex nameValidator = new Regex("^[\\^]+$");
これは機能しません:
!nameValidator.IsMatch(myString)
なんで?
^ 文字クラスの内側と外側では意味が異なるためです。クラス文字の否定を意味します。したがって、私の正規表現は、\
および以外のすべてを許可します^
Regex nameValidator = new Regex(@"^[^^\\]+$");
この方法を試してください:
Regex nameValidator = new Regex(@"^[^\^\\]+$");
string sample_text = "hello world";
bool isMatch = nameValidator.IsMatch(sample_text); // true
sample_text = @"Hello ^ \world ";
isMatch = nameValidator.IsMatch(sample_text); // false
\ は、C# の文字列リテラルのバックスラッシュをエスケープします。したがって、あなたの正規表現(正規表現エンジニアが見るように)は
^[\^]+$
これは有効ですが、あなたが望んでいたものではありません。(cared はバックスラッシュでエスケープされます) 次のように変更します。
new Regex("[\\\\\\^]+");
または、文字列リテラルの前に @ を使用します (推奨)
new Regex(@"[\\\^]+");
バックスラッシュとキャレットの両方をエスケープする必要があるため、バックスラッシュを 3 つ使用します。@ なしで文字列リテラルで使用するには、すべてのバックスラッシュを再度エスケープする必要があるため、6 つになります。