[英]Regex in javascript to allow only numbers, commas, and a single decimal point
目前,我正在使用此正則表達式來匹配帶單個小數點的正數
/^\d+(\.\d+)?$/
但這不允許逗號。 我如何修改它以允許小數點前有零個或多個逗號?
范例:
編輯:
有效值
值可以帶或不帶逗號輸入。 該字段的數據類型為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+)(?:(?:\\d+)|(?:(?:,\\d+)?))+(?:\\.\\d+)?$/
所有?:
只是要對正則表達式引擎明確地說“不要捕獲此括號所匹配的以下組)。
簡化的版本是
/^(\\d+)((\\d+)|((,\\d+)?))+(\\.\\d+)?$/
但是它無緣無故地捕獲了很多匹配組,所以我刪除了它們
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.