0

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

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}$/;

两者都一样好。

4

2 回答 2

0

剥离所有非数字字符(可能 + 除外)可能会更容易,然后对其进行正则表达式,然后如果需要输出它,只需重新格式化即可。

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

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

有关国家/地区代码的更多详细信息,请参阅此帖子

于 2013-07-03T12:36:27.480 回答
0

我认为您可能需要将正则表达式限制为您所针对的国家/地区的手机号码格式,如果可能的话,或者根据不同国家/地区的手机号码格式检查各种模式的输入。看起来你的正则表达式也会匹配.-而不是“只有数字和'+'”。

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

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

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

于 2013-07-03T12:44:55.590 回答