2017-08-02 51 views
1

我需要正則表達式來驗證正或負雙。我嘗試了以下正則表達式:正則表達式在java中爲正或負雙

^[-+]?\\d+(\\.{0,1}(\\d+?))?$ 

但它允許前導0(例如01和00)。我如何修改我的正則表達式,使其不允許前導0?

+0

您可以使用:'^ [ - +] [1-9] \ d *?(?:?:\ \ d +)?$ ' – anubhava

+1

爲什麼在try catch塊中不使用Double.parseDouble(myString)? – jeanr

+1

你找不到,謝謝你。 anubhava – psilos

回答

4

下面是一個例子(.NET語法,應在爪哇行太):

^[+-]?(([1-9]\d*)|0)(\.\d+)? 

基本上,這有一個可選的+或 - 符號,隨後是0或1的數 - 9隨後任意數量的數字。或者,它可以包含一個小數點,後跟一個或多個數字。

這個正則表達式的最重要的事情(這就是解決你的問題)是它的附加限制,即多位數不能以0開始 - 你可以有東西,等於正是 0,但你不能有像000010.1或0000.0或類似的東西。類似於0或0.0或100.1就可以。

+1

在Java中,反斜槓需要用反斜槓轉義,所以'\ d'和'\ .'需要改爲'\\ d'和'\\。'(否則Java會認爲您使用的是反斜槓轉義字符,它不會被傳遞給正則表達式引擎)。其餘的,是的,它是Java兼容的。 – Zabuza

+0

@psilos您可能需要用\\替換\(我正在使用.NET測試它,而不是Java)。 – EJoshuaS

+1

謝謝你們兩位。 Java.Sorry中正確的是**^[+ - ]?(([1-9] \\ d *)| 0)(\\。\\ d +)?**。 – psilos

1

這裏是另一種選擇,它處理的指數,如果你希望他們:

^[+-]?([1-9][0-9]*|0)(\.[0-9]+)?((e|E)[+-]?[0-9]+)?$ 

我剛纔意識到,這本質上是相同的,與指數除了@EJoshuaS」。

這裏是一個鏈接以驗證它:

https://regex101.com/r/WEaNLR/4

+0

我喜歡* regex101 *的鏈接。請注意,它也一步一步地解釋了正則表達式,這是OP知道的好工具。 – Zabuza

+0

這不符合'1.2' – Toto

+0

@Toto,謝謝,修正它。 – redxef