Javascript ASP.NET Regex验证移动电话号码

Javascript ASP.NET Regex验证移动电话号码,javascript,asp.net-mvc,regex,Javascript,Asp.net Mvc,Regex,我有一个应用程序,通过短信向用户发送TAN。我们已经有API发送短信到手机号码。因此,我必须确保它是正确的手机号码。下面是我的正则表达式: function validateMobile(str) { var filter = /^\+?(\d[\d-. ]+)?(\([\d-. ]+\))?[\d-. ]+\d$/; if (!filter.test(str)) { alert('Please provide a valid mobi

我有一个应用程序,通过短信向用户发送TAN。我们已经有API发送短信到手机号码。因此,我必须确保它是正确的手机号码。下面是我的正则表达式:

function validateMobile(str) {

        var filter = /^\+?(\d[\d-. ]+)?(\([\d-. ]+\))?[\d-. ]+\d$/;

        if (!filter.test(str)) {
            alert('Please provide a valid mobile phone number');
            return false;
        }
        return true;
    }
它不接受字符,只允许数字和“+”。用户可以输入,例如+49176xxxxxxxx或0176xxxxxxxx(无特定国家代码)

但是这个正则表达式有严重的缺陷。用户可以输入任何数字,例如1324567982548,此正则表达式也返回true。我想检查一下文本框的长度,暂时还可以,但仍然不是一个合适的解决方案

有没有其他更好的正则表达式或方法来检查更具体的手机号码

提前谢谢

已解决

我用一个新的正则表达式解决了这个问题:

var filter = /^(\+49\d{8,18}|0\d{9,18})((,\+49\d{8,18})|(,0\d{9,18}))*$/;
或如以下mzmm56所示:

var filter = /^(?:(\+|00)(49)?)?0?1\d{2,3}\d{8}$/;

两者都很好。

去除所有非数字字符(可能+除外),然后对其进行正则化,如果需要输出,只需重新格式化即可

以下是去除非数字字符后电话号码的正则表达式:

^\+[1-9]{1}[0-9]{10}$

有关国家代码的更多详细信息,请参阅。

我认为,如果可能,您可能需要将regex限制为目标国家的手机号码格式,或者根据不同国家的手机号码格式,对照各种模式检查输入。似乎您的正则表达式将匹配
-
,而不是“仅匹配数字和'+'

无论如何,在德国,我相信下面的正则表达式会起作用,只允许一个
+
开头,然后只允许数字:

^(?:(\+|00)(49)?)?0?1\d{2,3}\d{8}$

使用
0?1\d{2,3}
时,要考虑到德国手机号码可能以
0
开头,也可能不以
1
开头,然后是另外2个号码(在您的情况下是76),或者如果没有前导0,则是3个号码(176)。

嘿,谢谢。它起作用了。此外,我还提出了另一个正则表达式,它的工作原理与您的var filter=/^(\+49\d{8,18}0\d{9,18})(,\+49\d{8,18})|(,0\d{9,18}))*$;