Dart 正则表达式替换除数字以外的所有内容并允许一次。要么 ,

Dart Regexp replace all but numbers and allow once . or ,

我需要替换不是数字的所有内容,并且只允许第一个 ,.

final string = _lengthController.text?.replaceAll(RegExp('[^0-9,.]'), '')

这是我目前得到的,它工作正常,但会允许 , . 不止一次。

那么如何在第一个之后替换每个 ,.,而不是每个都允许替换一个,但总共只能替换一个。

您可以使用

text.replaceAllMapped(RegExp(r'^([^,.]*[.,])|\D+'), (Match m) => 
   m[1] != null ? m[1].replaceAll(RegExp(r'[^0-9,.]+'), '') : '')

^([^.,]*[.,])|\D+ 正则表达式匹配

  • ^([^,.]*[.,]) - 字符串的开头,然后是除 ,. 之外的任何字符,然后是 ., 捕获到组 1
  • | - 或
  • \D+ - 任何一个或多个非数字字符。

如果第一个选项匹配,,. 应该被保留,所以 .replaceAll(RegExp(r'[^0-9,.]+'), '') 用于删除除数字以外的所有字符,.,.

如果 \D+ 匹配,则表示第一个 ., 已经匹配,因此替换为空字符串。