-1

前回、最小8桁の文字列をチェックするように求められました. そして、次の正規表現を取得しました:

    /^(?=(.*\d){8,})[\d\(\)\s+-]{8,}$/

ここで質問を見ることができます:正規表現を使用して最小8桁の文字列を確認する

今、同じ正規表現で最大14桁を受け入れるように文字列を制限したいと思います。そして、私はこれを試しました:

   /^(?=(.*\d){8,14})[\d\(\)\s+-]{8,}$/

運がない。誰でもこれを修正するのを手伝ってください。

アップデート

2 票の反対票を獲得した後、自分で書いたほうがよいと考えました。以前の正規表現を使用して正規表現を構築しました。次の正規表現は私のために機能します:

    /^(?=(.*\d){8})(?!(.*\d){15})[\d\(\)\s+-]{8,}$/
4

4 に答える 4

5

あなたの要求により、正規表現は次のように単純にする必要があります。

/^\d{8,14}$/
于 2012-12-05T06:52:27.567 に答える
3

あなたの答えと他の質問から、あなたはたくさんの異なるルールを1つのますます複雑な正規表現にエンコードしているようです:

  1. 文字列は少なくとも12文字の長さである必要があります
  2. 数字、括弧、+記号と-記号、およびスペースのみを含めることができます
  3. 8〜14桁である必要があります

正規表現を使用してこれを行うことは可能ですが、それは価値がありますか?このような複雑な正規表現は読み取ることができず、したがって保守が難しいと私は主張します。

異なる基準を分割すると、はるかに明確になります。

  1. string.length >= 12
  2. string =~ /^[\d()+-\s]+$/-角かっこを使用して文字クラスを作成することにより、物事をエスケープする必要がなくなり、非常に簡単になることに注意してください。
  3. (8..14).include?(string.count("0-9")) -のドキュメントをチェックしてくださいString#count

だから、全体として、

def valid?(string)
  string.length >= 12 &&
    string =~ /^[\d()+-\s]+$/ &&
    (8..14).include?(string.count("0-9"))
end

少し長いですが、かなり理解しやすいです。

于 2012-12-05T13:36:37.150 に答える
1

試す:

/^(?=(.*\d){8,14}(?!.*\d))[\d\(\)\s+-]{8,}$/

負の先読みを正しく配置できれば、14 桁を超える文字列との一致に失敗するはずです。

于 2012-12-05T07:27:50.573 に答える
0

前の正規表現で目的が達成された場合は、「8」の 2 番目のインスタンスの後に 14 を追加してみてください。ただし、実際には 8 ~ 14 桁よりも複雑です。

于 2012-12-05T06:56:32.427 に答える