Flutter - 使用正则表达式验证电话号码

Posted

技术标签:

【中文标题】Flutter - 使用正则表达式验证电话号码【英文标题】:Flutter - Validate a phone number using Regex 【发布时间】:2019-08-28 08:26:21 【问题描述】:

在我的 Flutter 移动应用中,我尝试使用 regex 验证电话号码。以下是条件。

    电话号码必须包含 10 位数字。 如果我们使用国家代码,它可以是 12 位数字。 (例如国家代码:+12、012) 数字之间不能有空格或字符

简单来说,这里是唯一“有效”的电话号码

0776233475+94776233475094776233475

以下是我尝试过的,但它不起作用。

String _phoneNumberValidator(String value) 
    Pattern pattern =
        r'/^\(?(\d3)\)?[- ]?(\d3)[- ]?(\d4)$/';
    RegExp regex = new RegExp(pattern);
    if (!regex.hasMatch(value))
      return 'Enter Valid Phone Number';
    else
      return null;
  

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您可以使第一部分可选匹配 + 或 0 后跟 9。然后匹配 10 位数字:

^(?:[+0]9)?[0-9]10$
^ 字符串开始 (?:[+0]9)? 可以选择匹配 +0 后跟 9 [0-9]10匹配10位数字 $ 字符串结束

Regex demo

【讨论】:

注意:此 reg exp 不适用于任何通用电话号码,但仅对 OP 给出的号码有效,仅具有 +9 或 09 前缀。不要用作通用正则表达式。【参考方案2】:

使用正则表达式验证:

String validateMobile(String value) 
    String pattern = r'(^(?:[+0]9)?[0-9]10,12$)';
    RegExp regExp = new RegExp(pattern);
    if (value.length == 0) 
          return 'Please enter mobile number';
    
    else if (!regExp.hasMatch(value)) 
      return 'Please enter valid mobile number';
    
    return null;
                                                                                                  

【讨论】:

【参考方案3】:
  @override
  String validator(String value) 
    if (value.isEmpty) 
      return 'Mobile can\'t be empty';
     else if (value.isNotEmpty) 
      //bool mobileValid = RegExp(r"^(?:\+88||01)?(?:\d10|\d13)$").hasMatch(value);

      bool mobileValid =
          RegExp(r'^(?:\+?88|0088)?01[13-9]\d8$').hasMatch(value);
      return mobileValid ? null : "Invalid mobile";
    
  

【讨论】:

【参考方案4】:

我用的是@Dharmesh提供的RegExp

这就是您可以在 null 安全性下做到这一点的方法。

bool isPhoneNoValid(String? phoneNo) 
  if (phoneNo == null) return false;
  final regExp = RegExp(r'(^(?:[+0]9)?[0-9]10,12$)');
  return regExp.hasMatch(phoneNo);

用法:

bool isValid = isPhoneNoValid('your_phone_no');

【讨论】:

如果我不想要 RegEx 中的 (+91) 之类的国家/地区代码,我该怎么办。我只想验证一个普通的 10 位电话号码。 @JayTillu 很抱歉,RegEx 不是我的一杯茶。【参考方案5】:
String phoneNumberValidator(String value) 
    Pattern pattern =
        r'\+994\s+\([0-9]2\)\s+[0-9]3\s+[0-9]2\s+[0-9]2';
    RegExp regex = new RegExp(pattern);
    if (!regex.hasMatch(value))
      return 'Enter Valid Phone Number';
    else
      return null;
  

【讨论】:

以上是关于Flutter - 使用正则表达式验证电话号码的主要内容,如果未能解决你的问题,请参考以下文章

C# - 使用正则表达式验证电话号码

使用正则表达式验证瑞典电话号码

需要一个js正则 手机与电话都可以验证的

正则表达式手机号验证问题 急~~~

js正则表达式电话号码验证

js电话号码验证的正则表达式?