Javascript-用正则表达式替换字符串以格式化数字

Javascript-用正则表达式替换字符串以格式化数字,javascript,regex,Javascript,Regex,我想用一个正则表达式来创建一个标准的英国手机号码。从我在数据集中看到的情况来看,这些数字有以下不同的格式 +44 (0) 7111111111 +44 71111111111 44 71111111111 07111111111 NULL 我想做的是让他们都以07开头,然后是9个数字,例如 07111111111 所以我要做的第一件事就是删除所有空格 var origmob = "+44 (0) 1111111111"; newmOB = origmob.replace(/\s/g, "")

我想用一个正则表达式来创建一个标准的英国手机号码。从我在数据集中看到的情况来看,这些数字有以下不同的格式

+44 (0) 7111111111
+44 71111111111
44 71111111111
07111111111
NULL
我想做的是让他们都以07开头,然后是9个数字,例如

07111111111
所以我要做的第一件事就是删除所有空格

var origmob = "+44 (0) 1111111111";
newmOB = origmob.replace(/\s/g, "");
console.log(newmOB);
接下来,我需要以某种方式匹配

+44(0)
OR
+44
OR
44
OR
0 //This one is correct, not sure if I need to check this
这就是我觉得我有点卡住的地方。现在我有这个

var origmob = "+44 (0) 1111111111";
newmOB = origmob.replace(/ /g, "").replace(/^(\+44\(0\)|(\+44)|(44))/g, "0");
console.log(newmOB);
它有时会起作用,但我觉得不是很好。它不会以07开头字符串,也不会检查其后的长度。它也不会将NULL替换为空字符串

我如何改进regex和replace的混合,将不同的数字格式化为我所追求的标准格式


谢谢

您最好在一个单独且非常直接的替换中检查
NULL
。对于所有其他情况,这里有一种可能的方法:

/(\+?\s*44\s*(?:\(?0\)?)?\s*)(?=7\d{9})/
。匹配的是更换的零件:

  • 可选的+
  • 任意数量的空格
  • 44
  • 任意数量的空格
  • 可选组:
    (?0)?
    表示该字符在此组中是可选的)
  • 同样,任意数量的空白
您可以使用:

var str = '+44 (0) 7111111111';
var repl = '0' + str.replace(/\D+/g, '').slice(-10);
//=> "07111111111"
因此,我们正在做的是:

  • 以文本
    0
  • 从输入中删除所有非数字
  • 从替换的文本中提取最后10位数字
  • 正则表达式: 这匹配从字符串开始,直到9位,然后是9位,最后是字符串结束

    替换为: 这将为您提供
    07
    然后是正则表达式中匹配的9位数字


    演示:

    您只需获取最后9个数字并将其附加到
    07

    newmOB = origmob.replace(/.*(\d{9})$/g, "07$1");
    
    NULL
    的情况下,可以使用单独的条件来完成


    就我个人而言,我不会试图把所有东西都弄成一个正则表达式。这些东西很快就会变得笨重。至少,我会将
    NULL
    检查作为一个单独的案例。谢谢,我从来没有想过这一点:-)我将此标记为正确,因为我认为这是最好的方法。谢谢
    07\1
    
    newmOB = origmob.replace(/.*(\d{9})$/g, "07$1");