[英]Regular expression that matches 5 (exactly) comma separated currency values
我需要匹配5個以逗號分隔的貨幣值。
我確實有此功能的正則表達式,但我認為這不是實現此目的的好方法。
^(\$[0-9]{1,3}(?:[,.]?[0-9]{3})*(?:\.[0-9]{2})?,\s?){4}(\$[0-9]{1,3}(?:[,.]?[0-9]{3})*(?:\.[0-9]{2})?)$
PS,我必須將表達式拆分為匹配項,用4個逗號分隔出現的內容,用1個嗅出結尾的逗號(我認為這樣做不是這樣)
一些有效的匹配輸入可能是,
$200,000,$525,$60000,$120,000,$65,456 (space between currency values is optional)
$200,000, $525, $60000,$120,000, $65,456
一些無效的輸入值,
$200,000,$525,$60000,$120,000,$65,456, (Trailing comma)
$200,000,,$525,$60000.$120,000,$65,456,, etc
任何指針將不勝感激。
編輯:我正在尋找的解決方案是一個純正則表達式解決方案(比我上面寫的要好),這樣,一旦用戶輸入了錯誤的輸入,我就可以觸發驗證。
如果要在驗證價格時進行匹配,可以執行以下操作:
包括點和逗號以格式化價格
價格之間最多一個空格
^\$\d+([,.]\d{3})*( ?, ?\$\d+([,.]\d{3})*){4}$
細目 :
^
匹配輸入字符串的開頭(如果設置了m
標志,則匹配行) \\$\\d+
匹配一個在數字前面的$
(
開始分組( #1
)
[,.]\\d{3}
匹配前3位數字的句點或逗號 )*
分組結束( #1
),至少匹配零個時間 (
開始分組( #2
)
?, ?
匹配一個由可選空格(每邊一個空格)包圍的逗號 \\$\\d+
匹配一個在數字前面的$
([,.]\\d{3})*
匹配一個以3位數字(千位分隔符)開頭的句點或逗號,至少匹配零個時間 ){4}
分組結束( #2
),精確重復4次 $
輸入字符串的結尾(如果設置了m
標志,則為行) JS代碼:
var re = /^\\$\\d+([,.]\\d{3})*( ?, ?\\$\\d+([,.]\\d{3})*){4}$/g; var prices = ['$200,000,$525,$60000,$120,000,$65,456', '$200,000, $525, $60000,$120,000, $65,456', '$200,000,$525,$60000,$120,000,$65,456, ', '$200,000,,$525,$60000.$120,000,$65,456,,']; prices.forEach(function(s) { console.log(s + " => " + Boolean(s.match(re))) })
此正則表達式是您要實現的目標的簡單版本:
^(?:\$\d{1,3}(?:,?\d{3})*[,.] ?){4}\$\d{1,3}(?:,?\d{3})*$
-------------------------------
如果有不清楚的地方請告訴我
模式的最普遍字符是\\$
(轉義),無論是字符串的第一個字符還是逗號(可選,后跟空格),這都是使用(?:^|,)\\s*
。 之后,您需要任意數量的數字,即\\d+
,可以選擇后面跟一個逗號,然后再緊跟一個數字。 ,\\d+
。
結合這些,您將得到; /(?:^|,)\\s*(\\$\\d+(?:,\\d+)?)/g
const pattern = /(?:^|,|\\.)\\s*(\\$\\d+(?:,\\d+)?)/g; const test = [ '$200,000,$525,$60000,$120,000,$65,456', '$200,000, $525, $60000,$120,000, $65,456', '$200,000,$525,$60000,$120,000,$65,456,', '$200,000,,$525,$60000.$120,000,$65,456,,', ]; const matches = test.reduce((carry, string) => { let match = null; while (match = pattern.exec(string)) { carry.push(match[1]); } return carry; }, []); console.log(matches);
添加了修改后問題中的其他示例,包括.
現在顯示為分隔符( $200,000,,$525,$60000.$120,000,$65,456,,
)並修改了示例中的模式以解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.