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

45
在我的Flutter移动应用程序中,我正在尝试使用正则表达式验证电话号码。以下是条件:
  1. 电话号码必须含有10个数字。
  2. 如果使用国家代码,则可以为12位数字。(例如国家代码:+12、012)
  3. 数字之间不允许有空格或其他字符。
简单来说,以下是唯一的“有效”电话号码: 0776233475, +94776233475, 094776233475 以下是我尝试过的代码,但它不起作用。
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;
  }

我该怎么解决这个问题?

5个回答

66

您可以将第一部分设置为可选项,匹配+或0后跟着9。 然后匹配10个数字:

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

正则表达式演示


15
注意:此正则表达式不适用于任何通用的电话号码,仅适用于由OP提供的具有+9或09前缀的号码。不要将其用作通用正则表达式。 - vfede

56

使用正则表达式进行验证:

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

5
  @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";
    }
  }

3

我使用了由@Dharmesh提供的RegExp

以下是如何使用空安全进行操作。

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');

如果我不想在正则表达式中使用国家代码(+91),该怎么办?我只想验证普通的10位电话号码。 - Jay Tillu
@JayTillu,很抱歉,正则表达式不是我的强项。 - CopsOnRoad

0
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;
  }

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