用于验证邮政编码格式的 dart 正则表达式

Posted

技术标签:

【中文标题】用于验证邮政编码格式的 dart 正则表达式【英文标题】:dart regex for validating postal code format 【发布时间】:2020-06-19 13:23:42 【问题描述】:

我正在尝试创建正则表达式来验证所有邮政编码格式。我找到了What is the ultimate postal code and zip regex? 的答案,但它在 dart 中不起作用。以下是答案中的标准,这正是我正在寻找的

    每个邮政编码系统仅使用 A-Z 和/或 0-9,有时还使用空格/破折号

    并非每个国家/地区都使用邮政编码(例如都柏林以外的爱尔兰),但我们将在这里忽略它。

    最短的邮政编码格式是带有NN的塞拉利昂

    最长的是美属萨摩亚,有NNNN-NNNNNN

    您应该允许一个空格或破折号。

    不应以空格或破折号开头或结尾

这是我需要转换为 dart (?i)^[a-z0-9][a-z0-9\- ]0,10[a-z0-9]$ 的正则表达式

【问题讨论】:

【参考方案1】:
bool isZipValid = RegExp(r"^[a-z0-9][a-z0-9\- ]0,10[a-z0-9]$", caseSensitive: false).hasMatch(zip);

(?i)(不区分大小写模式)是FormatException: Illegal RegExp pattern的罪魁祸首

【讨论】:

【参考方案2】:

格式化英国邮政编码

String _formattedPostcode(postcode) 
    RegExp regExp = RegExp(
      r'^([A-Z]1,2\d1,2[A-Z]?)\s*(\d[A-Z]2)$'
    );
    var _pureString = postcode.replaceAll(' ', '');
    var fromat = regExp.hasMatch(_pureString);

    if(fromat) 
      final match = regExp.firstMatch(_pureString.toUpperCase());
      return "$match?.group(1)?.padLeft(2, '0') $match?.group(2)?.padLeft(2, '0')";
     else 
      return postcode;
    
  

【讨论】:

以上是关于用于验证邮政编码格式的 dart 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

用于目录路径格式验证的正则表达式

用于验证 .NET 时间格式的正则表达式

用于验证 Netezza DB 中数据格式的正则表达式

dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证

用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]

正则表达式,用于验证不同格式的字符串,用于特殊时间转换[重复]