簡體   English   中英

使用正則表達式測試數字輸入

[英]Testing for numeric input with regular expression

我有以下正則表達式:

^[-+]?[\\d{0,3},?\\d{3}]*\\.?\\d+$

我正在嘗試支持以下格式的數量:

  • 1
  • -1
  • -1.00
  • 100000

我不關心科學記譜法,但我的用戶可能會或可能不會用逗號輸入。 我遇到的問題是表達式匹配:

  • 100,
  • 100,00

我怎么能讓表達式表明如果有一個逗號,那么后面必須有三個字符。

試試這個正則表達式:

/^[-+]?(?:\d*|\d{1,3}(?:,\d{3})*)(?:\.\d+)?$/

試試這個

^([-+]?\d(?:(,\d{3})|(\d*))+\d*)?\.?\d*$ 

SUCCESSES

0
1
-1
-1.00
100,000
100.0
1,111,111
.25

FAILURES

100.0.
100.0,
asdf100.0
100,
1,11,111
,111,111

正如Robert Harvey指出的那樣,如果您所關心的只是捕獲要在程序中使用的數值,那么您可以刪除逗號,一切都會很好。

但是,假設這是一個格式化問題(也就是說,您正在檢查擊鍵並且只允許有效輸入,或者將輸入重新格式化為有效的數值),那么您可以嘗試這樣的事情:

編輯^[+-]?\\d{1,3}(,\\d{3})*(\\.\\d+)?$

這樣做是允許任意數量的逗號和3位數集,后跟零或一組點后跟一個或多個數字。

你把你的“計數”限定符放在方括號內,這沒有意義(從語法上來說,這是有道理的,但它沒有做你認為它正在做的事情)。

為什么不只是敲擊所有逗號然后測試?

g=oldstring.replace(',','');
g=g.replace('.','');//may as well do dots too
if (! g.match('/^[0-9]*[0-9]$/'))
    alert("Bummerific");

此外,如果你要允許使用逗號,那么你不應該讓它們每隔3位數使用逗號。 國際用戶使用逗號分隔小數位。 在這種情況下,如果你想要迂腐,那么這個正則表達式可能會起作用

/^[0-9][0-9,.]*[0-9]$/

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM