[英]Match number with unlimited decimal places
我想檢查用戶輸入的數字是否有效(X.XXXXX)。
這是我的代碼:
if(textField.getText().matches("^[0-9][.]+[0-9]$"))
{
System.out.println("This is a double");
}
如果用戶輸入5.5
,則執行println
。 如果用戶在點( 5.5XXX...
)后輸入5.55
或帶有更多數字的數字,則它將不匹配。
如何定義一個正則表達式來匹配點后所有數字,無論多少?
您的加號+
放錯了位置:
^[0-9][.]+[0-9]$
讓用戶輸入
5......1
您需要將其移至末尾:
[0-9][.][0-9]+
錨標記不是必需的,因為您正在使用matches()
。
請注意,此正則表達式過於簡單,因為它不支持負數,迫使用戶輸入.0
表示整數,並且除其他事項外不允許科學計數法。 支持這些功能的正則表達式要復雜得多(有關示例,請參見此問答 )。 您最好使用內置的解析方法來檢查輸入是否有效。
這是您的正則表達式:
[+-]([0-9]*[.])?[0-9]+
這將接受
其他人已經提到過正則表達式解決方案(Danyal的解決方案到目前為止是最全面的)。 雙重的“真實”正則表達式非常復雜! 在這里看到這個問題:
但我認為您是在問一個錯誤的問題(盡管如此,仍然沒有一個解決科學符號):
您想要實現的是回答“此字符串是否是雙精度字符串?”。 現在,比正則表達式更具可讀性和整體“更好”的東西。
例如,如注釋中所述,您實際上可以嘗試解析該字符串,看看它是否無法解析。 這也是我鏈接的問題中的推薦方法,也是您應該遵循的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.