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

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

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

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

0776233475+94776233475094776233475

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: android ios regex dart flutter


    【解决方案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)?(?:\d{10}|\d{13})$").hasMatch(value);
      
            bool mobileValid =
                RegExp(r'^(?:\+?88|0088)?01[13-9]\d{8}$').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;
          }
        

        【讨论】:

          猜你喜欢
          • 2016-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          • 1970-01-01
          • 2011-10-18
          • 2014-06-25
          相关资源
          最近更新 更多