^\d+$
許可しないように改善するにはどうすればよい0
ですか?
編集(より具体的にする):
許可する例:
1
30
111
許可しない例:
0
00
-22
先頭に0が付いた正の数が許可されているかどうかは関係ありません(例:)022
。
これは、Java JDK Regex実装用です。
回答:
^[1-9]+$
ですか?
^[1-9]+$
10を許可しない
^[1-9]+$
は許可しません10
。@Mulmothは0回以上一致するため1
、提案で許可され\d*
ます。ただし、で076
開始されないため、は許可されません[1-9]
。
01
ですか?
遅くなって申し訳ありませんが、OPは許可を望んでいます076
が、おそらく許可したくありません0000000000
。
したがって、この場合、少なくとも1つの非ゼロを含む1つ以上の数字の文字列が必要です。。あれは
^[0-9]*[1-9][0-9]*$
^[0-9]*[1-9][0-9]*(\.[0-9]+)$
、それはあなたが「10進数」によって何を意味するかについての仮定を作っています。指数部が必要ですか?これはかなり複雑なので、別の質問をします。
^0*[1-9]\d*$
最初のもの[0-9]*
は[1-9]
最初の非ゼロが見つかるまでのみアクティブです。つまり、最初のゼロがあるまでだけアクティブ0*
です()。
これを試してください、これは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
[1-9]\d*
。
0を除く^\+?[1-9]\d*$
任意の正の整数:0を含む任意の正の整数:^(0|\+?[1-9]\d*)$
これが必要かもしれません(編集:フォームの番号を許可してください0123
):
^\\+?[1-9]$|^\\+?\d+$
しかし、それが私なら、代わりに
int x = Integer.parseInt(s)
if (x > 0) {...}
Integer.parseInt()
それ自体はほとんどオーバーヘッドを追加しません。コストがかかるのは、例外のスローとキャッチです。
\\+?
接頭辞の扱いは何ですか?これは、Javaソースコードに表示されるので、エスケープされたプラス記号であると思われますが、なぜですか?マイナス記号が許可されていない場合は、プラス記号も外れていると仮定しても安全だと思います。
このRegExは、0から正の整数に一致します。
(?<!-)(?<!\d)[1-9][0-9]*
これは、負の数であることを示す数値の前にマイナスを検索する2つの負の後読みで機能します。また、-9より大きい負の数値(例-22)でも機能します。
私のパターンは複雑ですが、「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]))$
^ [1-9] * $は私が考えることができる最も簡単なものです
10
やなどの数値と誤って一致しません29303
。空の文字列にも一致します。
これは小数> 0のみを許可する必要があります
^([0-9]\.\d+)|([1-9]\d*\.?\d*)$
076
ますか?