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+
匹配,则表示第一个 .
或 ,
已经匹配,因此替换为空字符串。
我需要替换不是数字的所有内容,并且只允许第一个 ,
或 .
。
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+
匹配,则表示第一个 .
或 ,
已经匹配,因此替换为空字符串。