正規表現を手伝ってください。 文字列の検証に取り組んでいます。値には%のみを含めることはできません。%がある場合、長さは%を含む3文字を超える必要があります。 %は、文字列内の任意の場所に指定できます(ドットが含まれます)。
これを思いつくことができた。この検証は、%が文字列に含まれている場合にのみ発生します。 %がない場合、検証は必要ありません。
@"^[a-zA-Z0-9".]*%"; //{3,}$";
ありがとう、ナビーン
例:
"%"
- 失敗します"%12"
- 失敗します"%123"
- パス"%1234"
- パス"12%3"
- パス"abc%"
- パス"abc"
- パス"A"
- パス"ABC"
- パス
回答:
回答№1の場合は3私はこれが必要だとは思わない Regex
解決するには、いくつかの文字列メソッドで十分です:
var valid = !input.Contains("%") || input.Length > 3;
あなたが使いたいなら Regex
、 はい、どうぞ:
^([^%]+|.{4,})$
回答№2の6
それが検証の範囲であれば、次のように使用した方が良いでしょう Contains("%")
そして Length
のプロパティ string
.
return !value.Contains("%") || value.Length > 3;
単一の正規表現でテストすることは本質的に困難です どちらも 全長および内のパターンのため。もし %
固定位置(開始、終了、開始から2番目の文字など)にあった場合、より適切にフィットしますが、現状では、これは解決すべき問題ではありません 優雅に 単一の正規表現で。
someいRegExを使用して、いくつかのルックアラウンドですが、そのソリューションは異なるRegEx実装間で移植可能ではない可能性があります(たとえば、クライアント側のJavascript検証ではおそらく動作しません)。
回答№3の場合は1
C#で次の式を試してください。
@"^((?=(?>.*?[^%]){3,}).*|[^%]+)$"
例で説明されているように一致します。
"%"
- 失敗します"%12"
- 失敗します"%123"
- パス"%1234"
- パス"12%3"
- パス"abc%"
- パス"abc"
- パス"A"
- パス"ABC"
- パス
javascriptで動作するように、同じ式で非キャプチャ、非アトミックグループを使用します(Jayの問題に対処します)。
@"^((?=(?:.*?[^%]){3,}).*|[^%]+)$"
回答№4の場合は1
検証には少なくとも1文字が必要であるという仮定の下で-
^(?:[^%]+|.*[^%].*[^%].*[^%].*)$
JonMと同じです(ただし、これを削除する方法はわかりません)。