我试图用正则表达式创建一个标准的英国手机号码。根据我在数据集中看到的,数字有以下不同的格式
+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。
我怎样才能改进这种正则表达式的混合并替换为不同的数字格式化为我想要的标准格式?
由于
答案 0 :(得分:2)
您最好单独检查NULL
- 并且非常直接 - 替换。对于所有其他情况,这是一种可能的方法:
/(\+?\s*44\s*(?:\(?0\)?)?\s*)(?=7\d{9})/
Demo。匹配是替换部分:
(?0)?
(?
表示该组中的字符是可选的)答案 1 :(得分:1)
您可以使用:
var str = '+44 (0) 7111111111';
var repl = '0' + str.replace(/\D+/g, '').slice(-10);
//=> "07111111111"
所以我们正在做的是:
0
答案 2 :(得分:1)
^.*(\d{9})$
这匹配从字符串开始到9位数字,然后是9位数字然后字符串结束。
07\1
这将为您07
提供正则表达式中匹配的9位数字。
答案 3 :(得分:1)
您只需获取最后9个数字并将其附加到07
:
newmOB = origmob.replace(/.*(\d{9})$/g, "07$1");
如果是NULL
,可以使用单独的条件来完成。
请参阅example。