簡體   English   中英

在 javascript 中使用正則表達式驗證字符串

[英]Verify a string with regex in javascript

我需要接受一個字符串來定義用戶將使用多少 ZIP 代碼。

例子:

  • 如果用戶想使用從 1000 到 1200 的所有 zip 代碼
    然后他會輸入1000:1200
  • 如果他只想使用 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

Regex101.com 示例和說明

沒有范圍
正則表達式更簡單,但它也可以匹配任何四位數字,如00009999

/^\d{4}(?::\d{4}(?!:)|,\d{4})*$/g

Regex101.com 示例和說明

最簡單 - 但不能用作驗證器
更簡單的解決方案是

/^\d{4}(?:[,:]\d{4})*$/g

Regex101.com 示例和說明
但正如您所看到的,它會匹配許多錯誤的輸入,例如無效的1000:1005:1020 (兩個:

暫無
暫無

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

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