2017-02-22 15 views
1

次の正規表現では、+/-接頭辞をオプションとして使用する列データ型NUMBER(9,2)の入力データを検証します。NUMBER(m、n)を検証するための正規表現

[+-]?(?:[0-9]{1,7})?(?:\.[0-9]{1,2})? 

できる値

+1 
+1.1 
-0.1 
+.1 
1 
1.1 
0.1 
1 
-1 
-1.1 
-.1 
1111111.11 
+1111111.11 
-1111111.11 

失敗例

+ 
- 

しかし、キャプチャグループは、すべてのオプション作られているので、それはまた、唯一の+/-記号を受け付けます。どうやってこれを克服するのですか?

答えて

2

は、すべてのキャプチャグループはオプションなので
は、次の正規表現パターンを使用し発生した場合、それは必然的に単一[+-]と一致します

を更新しました:あなたは

^[+-]?(\d{1,7}|(?=\.))(\.\d{1,2})? 

https://regex101.com/r/4GIOga/5

+0

私はOPが7番しか望んでいないと思うので、あなたは '[+ - ]?\ d {1,7}(\。\ d {1,2})? 7桁です。 – Maakep

+0

@Fredrikの場合、確かに '\ d {1,2}'にする必要があります。ありがとう – RomanPerekhrest

+0

OPの質問では、最初の桁もオプションです。 – Niitaku

0

をインディへの​​サインクラスの後に肯定的な先読みを使うことができますそれは何が続いている場合にのみ、あなたがそれらを許可するケイト:

^[+-]?(?=.+)(?:[0-9]{1,7})?(?:\.[0-9]{1,2})?$ 

あなたが一度にすべての数字をテストする場合は、複数行の修飾子を設定する必要があります。

See the demo

0

これは、あなたが我慢してきたすべてのケースのために働くだろう、この

^{-|\+}?\d+(\.\d{1,2})?$ 

を使用してください。