[英]Verify a string with regex in javascript
我需要接受一個字符串來定義用戶將使用多少 ZIP 代碼。
例子:
1000:1200
1000,12000
1010:1015,1019,1025:1027
將返回[1010,1011,1012,1013,1014,1015,1019,1025,1026,1027]
我需要驗證那個字符串。
我用它來驗證,但它沒有用
/(\d{4}(:|,){0,1}\d{4})/gm
您需要在找到匹配項后展開這些匹配項。 我假設該字符串之前已驗證,如果不使用if (/^\d+(?:[:,]\d+)*$/.test(s)) {... }
。
let s = '1010:1015,1019,1025:1027'; const chunks = s.replace(/(\d+):(\d+)/g, (_,$1,$2) => Array.from( new Array(Number($2)-Number($1)), (x, i) => i + Number($1)).join(",")).split(','); console.log(chunks);
Array.from(new Array(Number($2)-Number($1)), (x, i) => i + Number($1))
部分生成使用/(\d+):(\d+)/g
獲得的 Group 1 和 Group 2 值之間的數字范圍/(\d+):(\d+)/g
正則表達式。
從匹配#### 或####:#### 的基本短語開始:
(\d{4}(:\d{4})?)
然后擴展它以匹配逗號分隔列表中的任意數量:
(\d{4}(:\d{4})?)(,(\d{4}(:\d{4})?))*
盡管我試圖簡化正則表達式,但這里是您特定字符串的真正驗證器。
看起來有點長,因為它匹配范圍1000→1200 : 1(?:[01]\d{2}|200)
/^1(?:[01]\d{2}|200)(?::1(?:[01]\d{2}|200)(?!:)|,1(?:[01]\d{2}|200))*$/g
沒有范圍
正則表達式更簡單,但它也可以匹配任何四位數字,如0000
、 9999
:
/^\d{4}(?::\d{4}(?!:)|,\d{4})*$/g
最簡單 - 但不能用作驗證器
更簡單的解決方案是
/^\d{4}(?:[,:]\d{4})*$/g
Regex101.com 示例和說明
但正如您所看到的,它會匹配許多錯誤的輸入,例如無效的1000:1005:1020
(兩個:
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.