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

时间:2016-02-10 19:57:00

标签: javascript regex

我试图用正则表达式创建一个标准的英国手机号码。根据我在数据集中看到的,数字有以下不同的格式

+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。

我怎样才能改进这种正则表达式的混合并替换为不同的数字格式化为我想要的标准格式?

由于

4 个答案:

答案 0 :(得分:2)

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

/(\+?\s*44\s*(?:\(?0\)?)?\s*)(?=7\d{9})/

Demo。匹配是替换部分:

  • 可选+
  • 任意数量的空白
  • 44
  • 任意数量的空白
  • 可选组:(?0)??表示该组中的字符是可选的)
  • 再次,任意数量的空白

答案 1 :(得分:1)

您可以使用:

var str = '+44 (0) 7111111111';
var repl = '0' + str.replace(/\D+/g, '').slice(-10);
//=> "07111111111"

所以我们正在做的是:

  1. 以文字0
  2. 开头
  3. 从输入中删除所有非数字
  4. 从替换文字中取最后10位数字

答案 2 :(得分:1)

的正则表达式:

^.*(\d{9})$

这匹配从字符串开始到9位数字,然后是9位数字然后字符串结束。

替换为:

07\1

这将为您07提供正则表达式中匹配的9位数字。

演示:https://regex101.com/r/sB8oM3/1

答案 3 :(得分:1)

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

newmOB = origmob.replace(/.*(\d{9})$/g, "07$1");

如果是NULL,可以使用单独的条件来完成。

请参阅example