You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何编写符合特定输入规则的RegExp?

Flutter 正则表达式匹配指定允许字符的写法

正则表达式实现

根据需求,需要匹配包含任意人类语言字符、英文数字、下划线、井号,且最多包含一个空格的输入,同时拒绝所有未提及的字符。以下是符合要求的两种实现:

情况1:不允许单独输入空格(输入至少包含一个非空格字符)

final validRegex = RegExp(r'^[\p{L}\d_#]+(?:\s[\p{L}\d_#]+)?$', unicode: true);

情况2:允许单独输入空格(支持单个空格作为合法输入)

final validRegex = RegExp(r'^(?:[\p{L}\d_#]+(?:\s[\p{L}\d_#]+)?|\s)$', unicode: true);

代码用法示例

bool checkInputValidity(String value) {
  final regex = RegExp(r'^[\p{L}\d_#]+(?:\s[\p{L}\d_#]+)?$', unicode: true);
  return regex.hasMatch(value);
}

// 调用示例
void main() {
  print(checkInputValidity("Hello_#123")); // true
  print(checkInputValidity("中文测试 456#")); // true
  print(checkInputValidity("a b")); // true
  print(checkInputValidity("Hello  123")); // false(连续空格)
  print(checkInputValidity("Hello!")); // false(包含感叹号)
  print(checkInputValidity(" ")); // false(情况1下,单独空格不合法)
}

正则表达式解析

  • ^ 和 $:限定匹配范围为整个字符串,避免部分匹配
  • \p{L}:匹配任意人类语言的字母字符(包括中文、英文、日文、阿拉伯文等所有Unicode标准中的字母),必须配合unicode: true参数才能生效
  • \d:匹配0-9的英文数字
  • _#:匹配下划线和井号
  • (?:\s[\p{L}\d_#]+)?:非捕获组,匹配“一个空格 + 一个或多个允许的非空格字符”,?表示这部分最多出现一次(确保整个字符串最多一个空格)
  • unicode: true:Flutter的RegExp默认不支持Unicode属性匹配,必须开启此参数才能让\p{L}正常工作

内容的提问来源于stack exchange,提问作者Mohammed Hamdan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:55:00