web-dev-qa-db-ja.com

正規表現では、文字列に0〜9の数字のみを含めることができ、長さは45に制限されます。

文字として0-9のみを含む文字列を持つように正規表現を作成しようとしていますが、長さは少なくとも1文字で45以下でなければなりません。たとえば、00303039は一致し、039330a29は一致しません。

これまでのところ、これは私が持っているものですが、それが正しいかどうかはわかりません

[0-9]{1,45} 

私も試しました

^[0-9]{45}*$

しかし、それもうまくいかないようです。私は正規表現にあまり詳しくないので、どんな助けも素晴らしいでしょう。ありがとう!

50
NewToRegEx

ほぼそこにいるので、必要なのは開始アンカー(^)と終了アンカー($)だけです。

^[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入力である必要があります。

143
codaddict

最初の文字列は、文字列内の任意の数の数字と一致します(他の文字も許可されます。つまり、「039330a29」)。 2番目は45桁のみを許可します(それ以上ではありません)。両方からより良いものを選んでください:

^\d{1,45}$

ここで、\d[0-9]と同じです。

14
eumiro

ゼロから始めたくない場合は、この正規表現を使用します。

^[1-9]([0-9]{1,45}$)

ゼロから始めてもかまわない場合は、次を使用します。

^[0-9]{1,45}$
11
Chamly Idunil

codaddictは正しい答えを提供してくれました。あなたが試したことについては、なぜ彼らがカットをしないのかを説明します:

  • [0-9]{1,45}はほとんどありますが、1〜45桁の文字列と一致します他の文字を含む別の長い文字列内で発生する場合でもです。したがって、^$を使用して、完全一致に制限する必要があります。

  • ^[0-9]{45}*$は、0回または任意の回数(*)繰り返された正確に45桁の文字列に一致します。つまり、文字列の長さは0または45の倍数(90、135、180 ...)のみになります。

5
BoltClock

おそらく、両方の試みの組み合わせが必要です。

^[0-9]{1,45}$
4
LukeH

^[0-9]{1,45}$は正しいです。

Railsはセキュリティ上の理由から^と$の使用を好まないため、おそらく\ Aと\ zを使用して文字列の先頭と末尾を設定する方が良いでしょう

2
NoDisplayName