正则表达式(.NET)验证任何实数

空指针

我正在研究一个独特的正则表达式规则,该规则可以验证两种不同格式的任何实数:

点(千)和逗号(十进制)

123 ; 1.234.567 ; 12.345.678 ; 123.456.789 ; 1.234.567,89 ; 1.234,56789 ; 1,2 ; 0,123

逗号(千)和点(十进制)

1,234,567 ; 12,345,678 ; 123,456,789 ; 1,234,567.89 ; 1,234.56789 ; 1.2 ; 0.123

还有其他一些限制要注意:数字可以在短语的中间,它的开头可以有标记(+,-,+ /-,±),而结尾可以有(e,exp,^) 。

我已经为此目的创建了一个帖子,最终的解决方案在这里:

(^|\s)[±+-]?\d{1,3}(?:(e|E|exp)\d+)?($|\s)|(^|\s)[±+-]?(?:([1-9]{1,3}(?:\.\d{3})*|[0])(?:,\d*)?(?:(e|E|exp)\d+)?)($|\s)|(^|\s)[±+-]?(?:([1-9]{1,3}(?:,\d{3})*|[0])(?:\.\d*)?(?:(e|E|exp)\d+)?)($|\s) 

到目前为止一切正常。但是,当数字位于以点(。)或逗号(,)或任何其他字符结尾的短语的末尾时,我发现了一个问题。它不再检测到该数字。

一个简单的测试案例:“我的电话号码是123,456,789.89、0.123和123.456.789,89。”

请注意,解决此问题的唯一方法是在数字旁边添加一个空格。我尝试创建替换正则表达式规则,以在数字和下一个字符之间添加空格。没有成功...

有人能再帮我一次吗?

维克多·史翠比维

我建议($|\s)(?=[,.]*(?:$|\s))这样先行调整尾随边界,以检查(但不消耗)数字后是否有.,紧跟空格或字符串结尾:

(?<=^|\s)[±+-]?\d{1,3}(?:(?:[eE](?:xp)?)\d+)?(?=[.,]*(?:$|\s))|(?<=^|\s)[±+-]?‌​(?:(?:[1-9]{1,3}(?:\.\d{3})*|[0])(?:,\d*)?(?:(?:[eE](?:xp)?)\d+)?)(?=[.,]*(?:$|\s‌​))|(?<=^|\s)[±+-]?(?:(?:[1-9]{1,3}(?:,\d{3})*|0)(?:\.\d*)?(?:(?:[eE](?:xp)?)\d+)?‌​)(?=[.,]*(?:$|\s))

您还可以缩短代码并通过替换(e|E|exp)为来增强代码(?:[eE](?:xp)?所有非捕获组都可以变成捕获组,但是使用RegexOptions.ExplicitCapture仍然可以得到一个干净的Match对象。

(?<=^|\s)[±+-]?\d{1,3}([eE](xp)?\d+)?(?=[.,]*($|\s))|(?<=^|\s)[±+-]?(([1-9]{1,3}(\.\d{3})*|0)(,\d*)?([eE](xp)?\d+)?)(?=[.,]*($|\s))|(?<=^|\s)[±+-]?(([1-9]{1,3}(,\d{3})*|0)(\.\d*)?([eE](xp)?\d+)?)(?=[.,]*($|\s))

正则表达式演示

在此处输入图片说明

您还可以添加RegexOptions.Ignorecase标志并替换[eE](xp)?e(xp)?以进一步缩短模式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式(.NET)验证任何实数

来自分类Dev

正则表达式(.NET)以多种格式验证任何实数

来自分类Dev

任何小数的正则表达式

来自分类Dev

VIN验证正则表达式

来自分类常见问题

正则表达式数量验证

来自分类Dev

正则表达式以验证图像

来自分类Dev

正则表达式验证YYYYMMDD

来自分类Dev

价格验证的正则表达式

来自分类Dev

正则表达式以验证模式

来自分类Dev

正则表达式数量验证

来自分类Dev

正则表达式“ <>”验证

来自分类Dev

正则表达式生日验证

来自分类Dev

正则表达式验证网址

来自分类Dev

正则表达式,AngularJS验证

来自分类Dev

正则表达式日历验证

来自分类Dev

gSOAP 正则表达式验证

来自分类Dev

如何验证正则表达式

来自分类Dev

条件.NET正则表达式

来自分类Dev

条件.NET正则表达式

来自分类Dev

正则表达式.net多行

来自分类Dev

条件.NET正则表达式

来自分类Dev

多行正则表达式.Net

来自分类Dev

正则表达式-是否有任何简化此正则表达式(OR)的方法?

来自分类Dev

使用正则表达式时出错(验证正则表达式的代码)

来自分类Dev

带正则表达式(正则表达式)的IDN(域)的验证码

来自分类Dev

增强IP地址正则表达式验证-正则表达式重构

来自分类Dev

ASP.NET中的正则表达式验证

来自分类Dev

使用正则表达式的MVC .net密码验证

来自分类Dev

来自.NET兼容正则表达式的C ++ 11兼容正则表达式