簡體   English   中英

使用正則表達式匹配數字的第 n 個數字

[英]match pattern nth digit of a number using regex

我正在使用正則表達式/^(\+88)?01[3-9]\d{8}$/

let phoneNum = "+880136486336"

let validRegex = /^(\+88)?01[3-9]\d{8}$/;

console.log(validRegex.test(phoneNum));

匹配匹配某些字符串的模式,例如

+8801712345678
01712345678
01312349876

它工作正常,但我也想匹配01[n] ,其中n將是3-9 模式找出 mobile.network 運營商。

我想做這樣的事情

如果號碼是01712345678則打印“網絡運營商 A”,

如果號碼是+8801712345678則打印“網絡運營商 A”

如果號碼是01312349678然后打印“網絡運營商 B”

n的不同值的不同運算符。

這里017, 013, 014, 016, 015, 019, 018是我想用來根據手機號碼查找運營商的移動運營商代碼

我找不到任何方法來做到這一點。 我怎樣才能用正則表達式做到這一點?

您可以使用捕獲組捕獲開頭的三位數字,然后使用String#matchRegExp#exec獲取實際匹配項,然后,如果有匹配項,則獲取組值並從字典中獲取運算符名稱:

 const phones = ['+8801712345678','01712345678','01312349876']; const operators = {'017': 'Operator A', '013': 'Operator C', '014': 'Operator B', '016': 'Operator D', '015': 'Operator E', '019': 'Operator F', '018': 'Operator G'}; const validRegex = /^(?:\+88)?(01[3-9])\d{8}$/; for (const phone of phones) { const match = validRegex.exec(phone); if (match) { console.log(phone, "=> Valid, belongs to", operators[match[1]]) } else { console.log(phone,"=> NO MATCH"); } }

這里,

  • ^(?:\+88)?(01[3-9])\d{8}$ :第一個可選組現在是非捕獲組,現在有一個 ID = 1 的捕獲組, (01[3-9])
  • validRegex.exec(phone)得到匹配 object
  • operators[match[1]]通過鍵返回 Operator 名稱。

暫無
暫無

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

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