[英]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'
同時忽略散布在每一行中的任何非數字的一種解決方案是:
haystack
中刪除任何非數字字符/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.