2016-06-16 2 views
2

正常に動作しない標準式があります。 この式は、文字列内に無効な文字が含まれている場合に、その文字をキャッチします。それは私のテストではなく、RegExr.comで完璧に動作します。正規表現ですが、文字列全体を読み取っていません

expがある:/[a-zA-Z0-9'.\-]/g

それは上の障害が発生している:@#@# しかしに渡す:[email protected]#@#

それは、両方の時間を失敗する私が間違って何をやっていますか?

また、/^[a-zA-Z0-9'.\-]$/g試合は何も...

//All Boxs 
     $('input[type="text"]').each(function() { 

      var text = $(this).prop("value") 
      var textTest = /[a-zA-Z0-9'.\-]/g.test(text) 

      if (!textTest && text != "") { 
       allFieldsValid = false 
       $(this).css("background-color", "rgba(224, 0, 0, 0.29)") 
       alert("Invalid characters found in " + text + " \n\n Valid characters are:\n A-Z a-z 0-9 ' . -") 
      } 
      else { 
       $(this).css("background-color", "#FFFFFF") 
       $(this).prop("value", text) 
      } 
     }); 

編集:それは最初の文字に一致したためにして第2のケースで追加されたコード

+0

の一部ではない任意の文字に一致するregexで試してみてくださいそして、なぜあなたはパターンを使用しています、デリミタ? @KennethK。 –

+0

申し訳ありませんが、C#はそれとは関係がないと思います。コードを追加しました –

+0

あなたはすべてのことを許しませんか?除外するか? – ashishmohite

答えて

2

UPDATEは

あなたが

var textTest = /^[a-zA-Z0-9'.-]+$/.test(text) 
            ^^ 

/g修飾の不在と+数量詞を使用する必要があります。​​関数で使用される正規表現内で/gグローバル修飾子を使用すると、known issuesがあります。

あなたは/i大文字小文字を区別しない修飾子の助けを借りて、それを少し短くすることがあります。私は以下の言及として、あなたは文字クラスの最後に-をエスケープする必要はありません、

また
var textTest = /^[A-Z0-9'.-]+$/i.test(text) 

[...]しかし、あまり正規表現に精通していない開発者によってパターンが後で変更される場合は、エスケープしておくことをお勧めします。

ORIGINAL C#関連のDETAILS

[OK]を、あなたはRegex.IsMatch(str, @"[a-zA-Z0-9'.-]")を使用している、と言います。 Regex.IsMatchは、文字列の中にの部分一致があると、を検索します。したがって、入力文字列にASCII文字、数字、'.または-が含まれていると、これは成功します。したがって、[email protected]#@#がこのテストに合格し、@#@#は合格とは限りません。

あなたはRegex.IsMatch(str, @"^[a-zA-Z0-9'.-]$")ように、第2のいずれかを使用する場合は、(最後のオプション改行付き)のみ1文字列は、文字列の先頭に^一致としてマッチになるだろう、指定した範囲/セットから[a-zA-Z0-9'.-]マッチ1つの文字、 $は、文字列の最後(または最後の改行の直前)と一致します。

だから、あなたは数量詞(+が0回以上の繰り返しに一致するように1以上、または*にマッチする)とアンカー\A\zが必要です

Regex.IsMatch(str, @"\A[a-zA-Z0-9'.-]+\z") 
        ^^    ^^^ 

\Aは(常に)、文字列の先頭と一致し\zは.NETの文字列の最後に一致します。 [a-zA-Z0-9'.-]+は、ASCII文字、数字、'.または-のいずれかの1文字以上と一致します。

文字クラスの末尾にある-はエスケープする必要はありませんが、後で他の開発者がパターンを変更する必要がある場合は、\-を保持することがあります。

正規表現をテストする場所には注意してください。 RegexrはJavaScriptの正規表現構文のみをサポートしています。 .NET正規表現をテストするには、RegexStorm.netまたはRegexHeroを使用してください。

+0

ありがとう! 、/^[a-zA-Z0-9'.--]+$/ RegExr.comで失敗しましたが、ページ内で完璧に動作するようです –

0
/^[a-zA-Z0-9'.-]+$/g 

あなた(/[a-zA-Z0-9'.-]/g)は、働いていました文字列全体を一致させる必要があることを修正し(^$)、+または*を追加してさらに文字を入力してください(空のストライドを許可する場合はng)。 QUESTIONのREタギングAFTER

0

これは、これは本当に[タグ:C#の]である場合に許可されたcharset

/[^a-zA-Z0-9'.\-]+/g 

テスト

>>regex = /[^a-zA-Z0-9'.\-]+/g 
/[^a-zA-Z0-9'.\-]+/g 
>>regex.test("@###dsfdfjsakldfj") 
true 
>>regex.test("dsfdfjsakldfj") 
false 
関連する問題