文字として0-9
のみを含む文字列を持つように正規表現を作成しようとしていますが、長さは少なくとも1文字で45
以下でなければなりません。たとえば、00303039
は一致し、039330a29
は一致しません。
これまでのところ、これは私が持っているものですが、それが正しいかどうかはわかりません
[0-9]{1,45}
私も試しました
^[0-9]{45}*$
しかし、それもうまくいかないようです。私は正規表現にあまり詳しくないので、どんな助けも素晴らしいでしょう。ありがとう!
ほぼそこにいるので、必要なのは開始アンカー(^
)と終了アンカー($
)だけです。
^[0-9]{1,45}$
\d
は、文字クラス[0-9]
の略です。次のように使用できます。
^\d{1,45}$
アンカーは、partだけでなく、entire入力にパターンを強制的に一致させますそれの。
正規表現[0-9]{1,45}
は1〜45桁を探すため、foo1
のような文字列にも1
が含まれているため一致します。
^[0-9]{1,45}
は1〜45桁を探しますが、これらの桁は入力のbeginningにある必要があります。 123
に一致しますが、123foo
にも一致します
[0-9]{1,45}$
は1〜45桁を探しますが、これらの桁は入力のendにある必要があります。 123
に一致しますが、foo123
にも一致します
^[0-9]{1,45}$
は1から45桁を探しますが、これらの桁はbothの最初と最後である必要があります入力、実質的にはentire入力である必要があります。
最初の文字列は、文字列内の任意の数の数字と一致します(他の文字も許可されます。つまり、「039330a29」)。 2番目は45桁のみを許可します(それ以上ではありません)。両方からより良いものを選んでください:
^\d{1,45}$
ここで、\d
は[0-9]
と同じです。
ゼロから始めたくない場合は、この正規表現を使用します。
^[1-9]([0-9]{1,45}$)
ゼロから始めてもかまわない場合は、次を使用します。
^[0-9]{1,45}$
codaddictは正しい答えを提供してくれました。あなたが試したことについては、なぜ彼らがカットをしないのかを説明します:
[0-9]{1,45}
はほとんどありますが、1〜45桁の文字列と一致します他の文字を含む別の長い文字列内で発生する場合でもです。したがって、^
と$
を使用して、完全一致に制限する必要があります。
^[0-9]{45}*$
は、0回または任意の回数(*
)繰り返された正確に45桁の文字列に一致します。つまり、文字列の長さは0または45の倍数(90、135、180 ...)のみになります。
おそらく、両方の試みの組み合わせが必要です。
^[0-9]{1,45}$
^[0-9]{1,45}$
は正しいです。
Railsはセキュリティ上の理由から^と$の使用を好まないため、おそらく\ Aと\ zを使用して文字列の先頭と末尾を設定する方が良いでしょう