印度手机号的正则表达式

62

我想要一个印度手机号的正则表达式,它由10个数字组成。
这些数字应以9或8或7开头。

例如:

9882223456
8976785768
7986576783

它不应该匹配以1到6或0开头的数字。


这个回答解决了您的问题吗?印度电话号码和手机号的正则表达式验证 - gnat
18个回答

162

^[789]\d{9}$可以达到预期效果。

^     #Match the beginning of the string
[789] #Match a 7, 8 or 9
\d    #Match a digit (0-9 and anything else that is a "digit" in the regex engine)
{9}   #Repeat the previous "\d" 9 times (9 digits)
$     #Match the end of the string

更新

印度的一些电信运营商推出了以数字6开头的新移动号码系列。

如果需要使用该系列,请执行以下操作:

^[6-9]\d{9}$

3
这个正则表达式使用了 "^" 和 "$" 作为锚点,以确保它只匹配整个字符串。它不会匹配超过10个字符的字符串,也不会匹配少于10个字符的字符串。无论您使用的正则表达式引擎或方法是什么,都可能导致这种情况发生。在Rubular中,您可以找到你的字符串 - 它只匹配了有10个字符的那一个。 - eldarerathis
如果我必须添加一个条件,即0(零)不应该出现超过8次,该怎么做? - Ibrahim Quraish
@eldarerathis 对不起,我的错,我想说的是,它不应该匹配“9999999999”或任何只重复十次一个数字的手机号码。 - Noopur Phalak
@NoopurPhalak 哦,我明白了。在我看来,正则表达式对于这种检查来说会很困难,但你是正确的。它将接受一个所有数字都相同的字符串。 - eldarerathis
@eldarerathis 这应该可以工作 ^(?!(\d)\1{9})[7,8,9]\d{9}$。这将包括所有数字相同的手机号码。 - Noopur Phalak
显示剩余9条评论

55
^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$

你好,这是用于印度本地手机号和印度国际手机号验证的正则表达式。

以 9、8、7 开头,也可以添加其他数字。

您可以使用https://regex101.com/进行测试。

有效号码包括:

9883443344
09883443344
919883443344
0919883443344
+919883443344
+91-9883443344
0091-9883443344
+91 -9883443344
+91- 9883443344
+91 - 9883443344
0091 - 9883443344


1
感谢webx...我想在JAVA脚本中使用你的正则表达式。因此,为了开发人员的信息,您必须将正则表达式替换为以下内容。如我的示例所示,您可以使用var find1 = new RegExp("(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}", "g"); - Pankaj Vavadiya
0000000000 也是无效的,这个方法同样适用。 - Keyur Shah
嗨,Keyur,“0000000000”是无效的,我的正则表达式不接受无效的手机号码 ;) - webx
这看起来更有用...谢谢! - Rahul Dudhane

10

给你了 :)

^[7-9][0-9]{9}$

请勿匹配 9999999999 或任何只重复十次的数字。上述正则表达式将匹配它。 - Noopur Phalak

9
这对我有用。
^(?:(?:\+|0{0,2})91(\s*[\ -]\s*)?|[0]?)?[789]\d{9}|(\d[ -]?){10}\d$

有效场景:

+91-9883443344
9883443344
09883443344
919883443344
0919883443344
+919883443344
+91-9883443344
0091-9883443344
+91 -9883443344
+91- 9883443344
+91 - 9883443344
0091 - 9883443344
7856128945
9998564723
022-24130000
080 25478965
0416-2565478
08172-268032
04512-895612
02162-240000
+91 9883443344
022-24141414

无效的场景:

WAQU9876567892
ABCD9876541212
0226-895623124
6589451235
0924645236
0222-895612
098-8956124
022-2413184

1
我在JavaScript中使用了你的正则表达式,但是我必须删除^和$符号。并且还要用\替换单个\。你能解释一下为什么要使用^和$吗? - Pankaj Vavadiya
@Pankaj^ - 用于检查字符串的开头 $ - 用于检查字符串的结尾在许多编程语言中,有一些特殊字符在正则表达式之前由编译器处理。例如:要匹配字符串D:\test,正则表达式将写为"D:\test"您可以在此链接上获取更多信息:http://www.regular-expressions.info/characters.html - Vikas
@VikasKitawat:是的,Vikas,我已经搞定了。我从https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions找到了所有关于JavaScript的内容。 - Pankaj Vavadiya
在以下情况下,它应该返回false: validateMobile('99876543210') 返回true。 - VINIT CHURI

9
您可以使用这个。
/^(?:(?:\+|0{0,2})91(\s*|[\-])?|[0]?)?([6789]\d{2}([ -]?)\d{3}([ -]?)\d{4})$/

有效的输入:

6856438922
7856128945
8945562713
9998564723
+91-9883443344
09883443344
919883443344
0919883443344
+919883443344
+91-9883443344
0091-9883443344
+91 9883443344
+91-785-612-8945
+91 999 856 4723

无效条目:

WAQU9876567892
ABCD9876541212
0226-895623124
0924645236
0222-895612
098-8956124
022-2413184

将其验证,可以在https://regex101.com/上完成。


1
电话号码通常存储国际代码,因此在表单中进行复制和粘贴操作时,最好使用这种模式。 - Aurovrata

7

重新强调其他答案并提供一些有关“数字”含义的附加信息:

new Regex("^[7-9][0-9]{9}$")

将匹配使用罗马数字书写的电话号码。

new Regex(@"^[7-9]\d{9}$", RegexOptions.ECMAScript)

此正则表达式与上一个相同。当指定 RegexOptions.ECMAScript 时,\d 匹配任何罗马数字。

new Regex(@"^[7-9]\d{9}$")

将匹配使用任何数字书写的电话号码的最后9个数字。

区别在于,前两个模式只会匹配像 9123456789 这样的电话号码,而第三个模式也会匹配像 9੧੨੩੪੫੬੭੮੯ 这样的电话号码。

因此,您可以使用 \d 来匹配本地数字。但是,如果您想将本地数字的匹配限制为仅某些数字(如7-9),则需要进行额外的步骤。例如,在旁遮普语(印度)中,要能够匹配 ੯੧੨੩੪੫੬੭੮੯,可以按照以下方式操作:

CultureInfo.GetCultureInfo("pa-IN").NumberFormat.NativeDigits.Skip(7).Take(3)

这将返回数字 7-9 的本地化数字符号。然后,您可以将它们连接在一起以形成针对数字 7-9 的“文化感知”正则表达式。

5

我在我的项目中使用过这个正则表达式,它能很好地工作。

pattern="[6-9]{1}[0-9]{9}"

2

Swift 4

 - Mobile Number Validation [starting with 7,8,9]

     func validate(value: String) -> Bool {
                let PHONE_REGEX = "^[7-9][0-9]{9}$";
                let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
                let result =  phoneTest.evaluate(with: value)
                return result
            }

       if validate(value: value) {
                print("True")
            }

2

我使用Chrome扩展程序的JAVA脚本成功实现了这一点。

document.body.innerHTML = myFunction();
function myFunction()
{
    var phonedef = new RegExp("(?:(?:\\+|0{0,2})91(\\s*[\\- ]\\s*)?|[0 ]?)?[789]\\d{9}|(\\d[ -]?){10}\\d", "g");

    var str = document.body.innerHTML; 
    var res = str.replace(phonedef, function myFunction(x){return "<a href='tel:"+x.replace( /(\s|-)/g, "")+"'>"+x+"</a>";});

    return res;
}

这涵盖了以下数字模式。
9883443344
8888564723 
7856128945

09883443344 
0 9883443344 
0-9883443344

919883443344 
91 8834433441 
91-9883443344 
91 -9883443344 
91- 9883443344 
91 - 9883443344 
91 -9883443344

+917878525200 
+91 8834433441 
+91-9883443344 
+91 -9883443344 
+91- 9883443344 
+91 - 9883443344 
+91 -9883443344

0919883443344 
0091-7779015989 
0091 - 8834433440 
022-24130000 
080 25478965 
0416-2565478 
08172-268032 
04512-895612 
02162-240000 
022-24141414 
079-22892350

2
"^((0091)|(\+91)|0?)[789]{1}\d{9}$";

这也是一个有效的表达式。你可以在前面加上 0091,+91 或者 0,并且这是可选的。

更多详细的代码示例,请参考我的博客


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接