「0を除く任意の正の整数」の正規表現は何ですか


91

^\d+$許可しないように改善するにはどうすればよい0ですか?

編集(より具体的にする):

許可する例:
1
30
111
許可しない例:
0
00
-22

先頭に0が付いた正の数が許可されているかどうかは関係ありません(例:)022

これは、Java JDK Regex実装用です。


2
たとえば、受け入れ076ますか?
Karl Knechtel-自宅を離れて2011年

@Karl Knechtel:しかし、単純化のためにこの機能を犠牲にすることができます。
Zeemee

3
「0を除く任意の正の整数」0は正の整数ではないことに注意してください。
SK9 2014

回答:


176

これを試して:

^[1-9]\d*$

...さらに、30文字を超えるSOの制限を埋めるためのパディング:-)。

こちらがデモです


好奇心から、最後に\ d +が必要なのはなぜですか?なぜ動作しないの^[1-9]+$ですか?
mtahmed

18
@mtahmed:^[1-9]+$10を許可しない
Lie Ryan

1
「\ d *」は空の文字列にも一致します。
ダニエル

@mtahmed ^[1-9]+$は許可しません10。@Mulmothは0回以上一致するため1、提案で許可され\d*ます。ただし、で076開始されないため、は許可されません[1-9]
Karl Knechtel-自宅を離れて2011年

2
しかし、どう01ですか?
ミューズフル

71

遅くなって申し訳ありませんが、OPは許可を望んでいます076が、おそらく許可したくありません0000000000

したがって、この場合、少なくとも1つの非ゼロを含む1つ以上の数字の文字列が必要です。。あれは

^[0-9]*[1-9][0-9]*$

これはOPが求めていたものを満たしているようです
Abdul

正の整数と正の小数が必要です。何か解決策はありますか?

コメントとしてではなく、新しい質問としてそれを尋ねるべきです。しかしネタバレ:しかし^[0-9]*[1-9][0-9]*(\.[0-9]+)$、それはあなたが「10進数」によって何を意味するかについての仮定を作っています。指数部が必要ですか?これはかなり複雑なので、別の質問をします。
Ray Toal 2015年

1
コーナーケースを検討するための+1!ちなみに、このパターンはまったく同じように機能します。^0*[1-9]\d*$最初のもの[0-9]*[1-9]最初の非ゼロが見つかるまでのみアクティブです。つまり、最初のゼロがあるまでだけアクティブ0*です()。
mg007

1
これが正解です。質問ごとの正しい動作である00098を受け入れます。
Varun Sharma


12

これを試してください、これはrequiremntを十分に満たすために最もよく機能します。

[1-9][0-9]*

これがサンプル出力です

String 0 matches regex: false
String 1 matches regex: true
String 2 matches regex: true
String 3 matches regex: true
String 4 matches regex: true
String 5 matches regex: true
String 6 matches regex: true
String 7 matches regex: true
String 8 matches regex: true
String 9 matches regex: true
String 10 matches regex: true
String 11 matches regex: true
String 12 matches regex: true
String 13 matches regex: true
String 14 matches regex: true
String 15 matches regex: true
String 16 matches regex: true
String 999 matches regex: true
String 2654 matches regex: true
String 25633 matches regex: true
String 254444 matches regex: true
String 0.1 matches regex: false
String 0.2 matches regex: false
String 0.3 matches regex: false
String -1 matches regex: false
String -2 matches regex: false
String -5 matches regex: false
String -6 matches regex: false
String -6.8 matches regex: false
String -9 matches regex: false
String -54 matches regex: false
String -29 matches regex: false
String 1000 matches regex: true
String 100000 matches regex: true

2
ありがとうございます。ただし、承認された回答と比較しても、価値や優雅さはありません[1-9]\d*
Zeemee 2016年

1
\ dが0-9ではない数字を含む可能性があるため、@ Zeemeeは正しくありません。たとえば、一部のライブラリではواحدのようなアラビア数字。
dummyDev

@dummyDev知らなかった。言及していただきありがとうございます!
Zeemee

悲しいことに、これは「123abcd」に対してtrueを返します。
Charith Jayasanka

チャリスジャヤサンカ-はい、まだ先頭に^と末尾に "$"が必要です:-)
スティーブバローティ

7

^\d*[1-9]\d*$

前にゼロが埋め込まれていても、すべての正の値を含めることができます

許可する

1

01

10

11など

許可しない

0

00

000など



2

これを手に入れました:

^[1-9]|[0-9]{2,}$

誰かがそれを打ち負かしたのですか?:)


3
これで00よろしいですか?そしてそれは許可1aaaaaabcd01ます。これを解決するため^に、最初の代替案と$2番目の代替案のみに属します^([1-9]|[0-9]{2,})$
stea

まあ、これは受け入れます000000000。あなたはゼロ以外の整数言った。
Ray Toal

2

楽しみのために、先読みを使用した別の代替方法:

^(?=\d*[1-9])\d+$

必要な数の数字ですが、少なくとも1つはでなければなりません[1-9]


2

これが必要かもしれません(編集:フォームの番号を許可してください0123):

^\\+?[1-9]$|^\\+?\d+$

しかし、それが私なら、代わりに

int x = Integer.parseInt(s)
if (x > 0) {...}

1
2つの問題:これも「123abc」と一致し、123を返します。これにより、ParseExceptionがスローされる場合があります。
ダニエル

@Daniel:これはより大きな解析スキームの中で使用される可能性があるため、数字のみをキャプチャする正規表現/ BNFと、キャプチャされた数字がゼロ以外の正であることを確認するJavaコードがあるでしょう。
リーライアン

@Daniel:いずれの場合でも、データを整数として必要とするため、遅かれ早かれparseInt()を呼び出すか、独自のparseInt()をロールする必要があります。
リーライアン

@ダニエル:Integer.parseInt()それ自体はほとんどオーバーヘッドを追加しません。コストがかかるのは、例外のスローとキャッチです。
アランムーア

@嘘:\\+?接頭辞の扱いは何ですか?これは、Javaソースコードに表示されるので、エスケープされたプラス記号であると思われますが、なぜですか?マイナス記号が許可されていない場合は、プラス記号も外れていると仮定しても安全だと思います。
アランムーア

0

このRegExは、0から正の整数に一致します。

(?<!-)(?<!\d)[1-9][0-9]*

これは、負の数であることを示す数値の前にマイナスを検索する2つの負の後読みで機能します。また、-9より大きい負の数値(例-22)でも機能します。


0

私のパターンは複雑ですが、「0を除くすべての正の整数(1-2147483647、長くない)」を正確にカバーしています。これは10進数用で、先行ゼロは許可されません。

^((1?[1-9][0-9]{0,8})|20[0-9]{8}|(21[0-3][0-9]{7})|(214[0-6][0-9]{6})
|(2147[0-3][0-9]{5})|(21474[0-7][0-9]{4})|(214748[0-2][0-9]{3})
|(2147483[0-5][0-9]{2})|(21474836[0-3][0-9])|(214748364[0-7]))$

-2

^ [1-9] * $は私が考えることができる最も簡単なものです


この正規表現は、10やなどの数値と誤って一致しません29303。空の文字列にも一致します。
OmnipotentEntity 2013年

-3

これは小数> 0のみを許可する必要があります

^([0-9]\.\d+)|([1-9]\d*\.?\d*)$
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.