在这个正则表达式中允许破折号

时间:2014-02-28 08:27:41

标签: javascript regex

我正在使用这个名为“简单联系表单”的Wordpress插件,它提供了标准的验证方法。

它使用以下正则表达式来表示电话号码:

/^(\+{0,1}\d{1,2})*\s*(\(?\d{3}\)?\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/

刚才它允许以下格式(可能更多):

0612345678
+31612345678

但我希望它允许+316-1234567806-12345678 ......这可能吗?如果是这样,怎么样?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用不那么复杂的正则表达式:

^\+?\d{2}(-?\d){8,9}$

此正则表达式允许在电话号码的开头添加+,然后匹配两位数字,之后,数字在-之前(或之前),总共10或11位数。

现在,如果初始+仅适用于11位数的电话号码,则可以进行调整:

^\+?\d{3}(-?\d){9}|\d{2}(-?\d){8}$

我的正则表达式允许您使用-每个数字。如果这是一个问题,可以更改:

^\+?\d{3}(-?\d{2}){4}|\d{2}(-?\d{2}){4}$

我认为最后一个正则表达式将满足您的需求,而且非常简单!

答案 1 :(得分:0)

当你弄清楚你真正想要允许和不允许的模式时。然后在这个函数中填写它们,如果语句返回true,你就得到了你的正则表达式。

var regex = /^\+?\d{3}(-?\d{2}){4}|\d{2}(-?\d{2}){4}$/; //this is your regex, based on @Theox third answer

 //allowed patterns
['0612345678', '+31612345678', '+316-12345678', '06-12345678'].every(function(test) {
  return regex.exec(test) !== null;
}) &&
 //disallowed patterns, none right now
[].every(function(test) {
  return regex.exec(test) === null;
});