5

私はしばらくの間、必要な正規表現を見つけようとしてきました。の前の 3 文字。および小数点以下 2 文字。

私はこれを試します

[+ -]?[0-9]{0,3}[.]?[0-9]{0,2}    # but accepted as 55555 or the 
[+ -]?[0-9]{0,3}[.][0-9]{0,2}     # but this is not accepted as the 44 

誰かが私を助けることができますか?

4

3 に答える 3

4

これを使って:

^[+ -]?[0-9]{1,3}([.][0-9]{1,2})?$ 

ライブで見る

最初と最後にアンカーを追加しました。これらが省略された場合、55555は555と55の2つの一致を生成します。

于 2012-11-28T12:55:58.000 に答える
4

55555小数点のみをオプションにしたため、最初の試行で一致し、小数点のみをオプションでなくし44たため、2 番目の試行では一致しませんでした。やりたいことは、小数点以下の桁数をすべてオプションにすることです。

123それ以外の場合は一致を固定する必要もあり45.12、たとえば345一致します。12345.12345

文字列を検証する場合は、次を使用します。^[-+]?[0-9]{1,3}(\.[0-9]{1,2})?$

説明:

^                # Match the start of string
[-+]?            # Optional plus or minus
[0-9]{1,3}       # Followed by 1 - 3 digits 
(\.[0-9]{1,2})?  # Optionally followed by decimal place (escaped \) & 1-2 digits 
$                # Match the end of the string

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

その他の注意事項:

これは、パターンに適合する文字列のみに一致します。123.34

文字列内のパターンに一致させたい場合、つまりI am 123.34 cm tall

代わりに(^|\s)andをアンカーとして使用するよりも:(\s|$)

(^|\s)[-+]?[0-9]{1,3}(\.[0-9]{1,2})?(\s|$)

これは行頭と一致し、^行末と同じです。一致にはスペースが含まれるため、必要に応じて削除することを忘れないでください。|\s$trim(match)

于 2012-11-28T13:02:49.900 に答える
2

次のようなことを試すことができます:-

 ^?[0-9]{1,3}([.][0-9][0-9]?)?

また

 \d+(\.\d{1,2})?
于 2012-11-28T12:54:01.607 に答える