2

正規表現の経験は限られており、否定や否定の先読みなどに関するさまざまなチュートリアルや投稿を読んでいますが、私の状況に完全に一致するものはないようです。 パスワードを複雑

にするために、で属性を作成しようとしています。ASP.NET MVC3検証の一部には、最小数の繰り返し文字が含まれます。現在のプロジェクトでは制限は3ですが、一般化したいと思います。

最初は、@"(.)\1{3,}"4つ以上の繰り返し文字をテストし、その結果を否定するために使用していました。オブジェクトを作成する必要があるため、今はそれを行うことができません。ModelClientValidationRegexRuleオブジェクトは、肯定的な結果でのみ機能します。そのため、否定は正規表現自体の内部で実行する必要があります。ネガティブ先読みを使用しようとしたすべての方法が失敗します@".*(?!(.)\1{3,})"

何か案は?

4

5 に答える 5

3

問題を好転させます。文字の後には、最大で3つまで同じ文字を続けることができます。次に、他の何かが続く必要があります。最後に、文字列全体がこのようなシーケンスで構成されている必要があります。perlフレーバー:

^((.)\2{0,3}(?!\2))*$
于 2011-01-21T02:09:40.293 に答える
2

先読みの.* に入れる必要があります:

(?!.*?(.)\1{3,})

あなたがやっている方法では、文字列全体を消費し、先読みは、文字列の末尾の.*に同じ文字が 4 つないことを主張します。これはもちろん常に真です。

先読みで貪欲でない星を使用しましたが、それはより適切だと思われたためですが、貪欲でも機能します。先読みの中にある必要があります。

これは、正規表現でパスワードの強度を検証するための通常の手法である、いくつかの先読みの 1 つにすぎないと思います。ところで、は適切ですが、タグもregex-negation使用していれば、質問に対する回答がより迅速に得られたでしょう。regex

于 2011-02-12T13:41:37.567 に答える
0

^(.)(?!\1\1){8,}$2回以上繰り返される文字を持たない8文字以上の文字にはシンプルを使用しました。

于 2011-08-15T22:27:29.933 に答える
0

.*(.).*\1+.*この正規表現を使用して、既存の繰り返し文字に一致すると思います。でも、4人はあなた次第。

幸運を!

于 2016-03-19T10:07:33.830 に答える