1

正規表現について教えてください。文字列の検証に取り組んでいます。値に % のみを含めることはできません。% がある場合、長さは % を含めて 3 文字以上にする必要があります。% は、文字列のどこにでも指定できます (ドットが含まれます)。

私はこれを思い付くことができました。この検証は、% が文字列内にある場合にのみ行われるべきです。% がない場合、検証は必要ありません。

@"^[a-zA-Z0-9'.]*%"; //{3,}$";

ありがとう、ナビーン

例:

  • "%"- 失敗
  • "%12"- 失敗
  • "%123"- 合格
  • "%1234"- 合格
  • "12%3"- 合格
  • "abc%"- 合格
  • "abc"- 合格
  • "A"- 合格
  • "ABC"- 合格
4

4 に答える 4

6

Contains("%")それが検証の範囲である場合は、Lengthのプロパティを使用する方がよいでしょうstring

return !value.Contains("%") || value.Length > 3;

単一の正規表現で全長とパターンの両方をテストすることは本質的に困難です。%固定位置 (先頭、末尾、先頭から 2 文字目など) にある場合は、より適合しますが、現状では、これは単一の RegEx で適切に解決できる問題ではありませ

いくつかのルックアラウンドを使用して、醜い RegEx を使用して実行できますが、そのソリューションは、異なる RegEx 実装間で移植できる可能性は低いです (たとえば、クライアント側の Javascript 検証では機能しない可能性があります)。

于 2013-09-03T16:01:29.280 に答える
1

C# で次の式を試してください。

@"^((?=(?>.*?[^%]){3,}).*|[^%]+)$"

あなたの例で説明されているように一致します:

  • "%"- 失敗
  • "%12"- 失敗
  • "%123"- 合格
  • "%1234"- 合格
  • "12%3"- 合格
  • "abc%"- 合格
  • "abc"- 合格
  • "A"- 合格
  • "ABC"- 合格

javascript で機能するように、同じ式で非キャプチャ、非アトミック グループを使用します (Jay の問題に対処します)。

@"^((?=(?:.*?[^%]){3,}).*|[^%]+)$"
于 2013-09-03T16:17:55.837 に答える
1

検証には少なくとも1文字が必要であるという仮定の下で -

 ^(?:[^%]+|.*[^%].*[^%].*[^%].*)$

JonM と同じです (ただし、これを削除する方法はわかりません)。

于 2013-09-03T17:29:52.443 に答える