3

次のような正規表現があります。

     /^(\d|-|\(|\)|\+|\s){12,}$/

これにより、数字、(、)、スペースが許可されます。しかし、文字列に少なくとも 8 桁が含まれていることを確認したいと思います。許可されている文字列は次のとおりです。

      (1323  ++24)233
      24243434 43
      ++++43435++4554345  434

次のような文字列を許可しないでください。

     ((((((1213)))
     ++++232+++
4

3 に答える 3

7

最初に正規表現内で使用Look aheadします..

/^(?=(.*\d){8,})[\d\(\)\s+-]{8,}$/
  ---------------
          |
          |->this would check for 8 or more digits

(?=(.*\d){8,})0 から多くの文字 (すなわちzero width look ahead)の後に数字が続く (すなわち) 8 回から何度も (すなわち)checks.*\d{8,0}

(?=)文字を消費しないため、ゼロ幅と呼ばれます..チェックするだけです


14桁に制限するには、次のことができます

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

ここで試してみてください

于 2012-11-28T07:55:01.000 に答える
0

^、 、または$、 または の「以上」の部分について言及する必要はありません。これは、どこから来たのか不明です。{8,}{12,}

以下は、意図を透過的にします。

r = /
  (?=(?:.*\d){8})    # First condition: Eight digits
  (?!.*[^-\d()+\s])  # Second condition: Characters other than `[-\d()+\s]` should not be included.
/x

その結果:

"(1323  ++24)233" =~ r #=> 0
"24243434 43" =~ r #=> 0
"++++43435++4554345  434" =~ r #=> 0
"((((((1213)))" =~ r #=> nil
"++++232+++" =~ r #=> nil
于 2012-11-28T08:19:33.327 に答える