簡體   English   中英

正則表達式匹配忽略非數字的電話號碼

[英]Regex to match a phone number ignoring non digits

當數據中存在非標准格式時,我試圖匹配正則表達式中的電話號碼。 您將如何編寫一個正則表達式來匹配所有 4 個示例中的 0408111?

(04) 0811 111
0408-111111
0408111111
0a4b0c8d1e1f1g

我想到的最好的是:

/0[^\d]*4[^\d]*0[^\d]*8[^\d]*1[^\d]*1[^\d]*1/g

但是有更好的方法嗎?

 var haystack = ` (04) 0811 111 0408-111111 0408111111 0a4b0c8d1e1f1g `; var needle = /0[^\d]*4[^\d]*0[^\d]*8[^\d]*1[^\d]*1[^\d]*1/g; var result = haystack.match(needle); console.log(result);

給出您問題中的示例字符串。

let haystack = `
(04) 0811 111
0408-111111
0408111111
0a4b0c8d1e1f1g
`

每次在haystack的每一行中按此順序出現數字時返回字符串'0408111'同時忽略散布在每一行中的任何非數字的一種解決方案是:

  1. haystack中刪除任何非數字字符
  2. 返回模式/0408111/g的所有匹配項
let result = haystack.replace(/[^\d\n]/g, '').match(/0408111/g)

給定haystack如上所述, result將是[ '0408111', '0408111', '0408111', '0408111' ]

由於您說您正在使用它在輸入字符串的每一行中搜索電話號碼,並且您在問題中給出的示例是在每行中的 7 個連續數字上尋求匹配,而不管任何非數字字符。 一旦非數字字符被刪除,上面的代碼可以調整為匹配每行中的前 7 位數字 - 通過匹配/\d{7}/g而不是/0408111/g模式。

例如

let haystack = `
(04) 0811 111
0454-14717181
0768551351111
0tY4lopj9pjo5567
0a4b0c8d1e1f1g
123456
`

let result = haystack.replace(/[^\d\n]/g, '').match(/\d{7}/g)

這里的result將是[ '0408111', '0454147', '0768551', '0495567', '0408111' ]

暫無
暫無

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

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