【问题标题】:phone regex space [duplicate]电话正则表达式空间[重复]
【发布时间】:2018-12-01 11:40:22
【问题描述】:

我有这个电话正则表达式,但我希望它接受空格。

例如+57 52 5252255 应该通过,但目前没有通过。 “+91 9 820 09 8200”也应该通过 所以任何地方的空间都是可以接受的

var phone_regex =/^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/;

https://jsfiddle.net/ofn9knay/268/

【问题讨论】:

  • 只是一个想法,我相信有人会为你修复正则表达式,但我会在验证数字之前尝试去掉所有不必要的符号和空格。这样,您可以在将电话号码插入数据库之前定义自己的电话号码格式。

标签: javascript regex


【解决方案1】:

为了匹配该字符串,您的第二个捕获组需要接受 2 或 3 位数字。

pattern = /^\s*(?:\+?(\d{1,3}))?[- (]*(\d{2,3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/;

test_strings = [
    "+57 52 5252255",
    "9820098200#301",
    "+919820098200",
    "+91-982-009-8200",
    "+1 (866) 582-2655",
    "+91 444 741 4000",
];

for (var i = 0; i < test_strings.length; i++) {
  console.log(test_strings[i] + ": " + pattern.test(test_strings[i]));
}

【讨论】:

  • 我希望空间在任何地方,而不是在某些地方
  • 当前正则表达式确实接受数字集之间的空格。您是否想要一个正则表达式来匹配无限重复的一组空格/破折号分隔的任意长度的数字系列?只能用括号括起来第二组吗?最重要的是,你有额外的测试字符串吗?
【解决方案2】:

我们可以尝试调整您现有的复杂正则表达式,但假设您已经将电话号码作为变量的输入,那么要做的一件简单的事情就是删除所有空格:

var phone_regex =/^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/;
var phone = "+91 9 820 09 8200";
phone = phone.replace(/ /g,'');
console.log(phone_regex.test(phone));

然后,只需照常使用当前的正则表达式即可。

【讨论】:

  • 我当前的正则表达式不允许你在小提琴中看到的空格
  • @Jamesmarcus 你真的读过我的回答吗?我建议您在应用当前正则表达式之前从数字中删除空格。
  • 哦,我知道了,但目前这是我的代码 jsfiddle.net/uekpasv6 我如何调整它以按照您的建议进行操作?
  • @Jamesmarcus 你的演示有点薄,至少就不是真正的演示而言。只需在电话号码变量上调用.replaece(/ /g, '')
  • 那你的代码有问题。该逻辑在演示中运行良好。
猜你喜欢
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多