簡體   English   中英

javascript中的正則表達式僅允許數字,逗號和單個小數點

[英]Regex in javascript to allow only numbers, commas, and a single decimal point

目前,我正在使用此正則表達式來匹配帶單個小數點的正數

/^\d+(\.\d+)?$/

但這不允許逗號。 我如何修改它以允許小數點前有零個或多個逗號?

范例:

  • 11,111.00(應允許)對於小數點前有任意多個逗號的數字,我可以接受。

編輯:

有效值

  • 111
  • 11,111
  • 11,111.0
  • 111111

值可以帶或不帶逗號輸入。 該字段的數據類型為SQL MONEY,因此它將處理逗號。

需要

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

正則表達式演示

細節

  • ^ -字符串的開頭
  • (?:\\d{1,3}(?:,\\d{3})*|\\d+) -以下任一項:
    • \\d{1,3}(?:,\\d{3})* - 1到3位數字用的0+序列,和3位數字
    • | - 要么
    • \\d+ -1個或更多數字
  • (?:\\.\\d+)? -的可選序列. 和1個以上的數字
  • $ -字符串結尾。

 var strs = [',,,,', '111', '11,111', '11,111.0', '111111']; var re = /^(?:\\d{1,3}(?:,\\d{3})*|\\d+)(?:\\.\\d+)?$/; for (var s of strs) { console.log(s + " => " + re.test(s)); } 

這是一個非常簡單的通用解決方案,無需對需要多少位數進行任何假設。

/^\d[\d,]*(\.\d+)?$/

[\\d,]將匹配數字或逗號。
如果確實需要正則表達式更具體,則可以使其更復雜。

我會用這個

^(?:\d{1,3}(,\d{3})*|\d+|\d{2}(?:,\d{2})*,\d{3})(?:\.\d+)?$

參見演示和說明

這很難讀,但我會解釋

/^(?:\\d+)(?:(?:\\d+)|(?:(?:,\\d+)?))+(?:\\.\\d+)?$/

所有?:只是要對正則表達式引擎明確地說“不要捕獲此括號所匹配的以下組)。

簡化的版本是

/^(\\d+)((\\d+)|((,\\d+)?))+(\\.\\d+)?$/

但是它無緣無故地捕獲了很多匹配組,所以我刪除了它們

暫無
暫無

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

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