Javascript 正则表达式匹配电话号码,忽略非数字

Javascript 正则表达式匹配电话号码,忽略非数字,javascript,regex,Javascript,Regex,当数据中存在非标准格式时,我正在尝试匹配正则表达式中的电话号码。您将如何编写一个正则表达式来匹配所有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 0a4b0c8d1e

当数据中存在非标准格式时,我正在尝试匹配正则表达式中的电话号码。您将如何编写一个正则表达式来匹配所有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
`;
变量针=/0[^\d]*4[^\d]*0[^\d]*8[^\d]*1[^\d]*1[^\d]*1/g;
var结果=haystack.match(针);

控制台日志(结果)给出了问题中的示例字符串

let haystack=`
(04) 0811 111
0408-111111
0408111111
0a4b0c8d1e1f1g
`
每次在
haystack
的每行中按此顺序出现数字时返回字符串
'0408111'
,同时不考虑每行中散布的任何非数字的解决方案是:

  • 从haystack中删除所有非数字字符
  • 返回模式的所有匹配项
    /0408111/g
  • let result=haystack.replace(/[^\d\n]/g',).match(/0408111/g)
    
    如上所述,
    结果将是
    ['0408111','0408111','0408111','0408111','0408111','0408111']

    因为您说您正在使用它搜索输入字符串每行中的电话号码,并且您在问题中给出的示例是在每行中的7个连续数字上寻找匹配项,而不考虑任何非数字字符。删除非数字字符后,可以调整上述代码以匹配每行中的前7位,方法是在
    /\d{7}/g
    模式上进行匹配,而不是在
    /0408111/g
    模式上进行匹配

    e、 g

    let haystack=`
    (04) 0811 111
    0454-14717181
    0768551351111
    0tY4lopj9pjo5567
    0a4b0c8d1e1f1g
    123456
    `
    让result=haystack.replace(/[^\d\n]/g',).match(/\d{7}/g)
    

    这里的
    结果
    将是
    ['0408111','0454147','0768551','0495567','0408111']

    这将有帮助,内容如下:不确定为什么它被否决。。它是在数据库中搜索一个字段以查找特定的数字,但它只接受正则表达式。我不是用它来判断它是否是一个有效的数字。你是想把一个字符串和一个特定的数字匹配起来吗?或者你有一些更一般的规则?是的,它试图找到一个特定的数字。