C# 用于从负范围开始并以正结尾的数字的正则表达式验证器

C# 用于从负范围开始并以正结尾的数字的正则表达式验证器,c#,asp.net,regex,web-applications,web,C#,Asp.net,Regex,Web Applications,Web,我正试图以我的方式解决这个问题 我有一个文本框,我必须验证一个数据,它必须是一个数字,范围从-90到90 不带逗号,只允许点 例如: 2.34允许 3,54禁止 134禁止 -78允许 我已经创建了此表达式:^[-+]?[0-9]*.?[0-9]+$它支持我的数据格式化,但不验证数据范围,有人能为我推荐一个盗用此表达式的解决方案吗 <asp:RegularExpressionValidator runat="server" id="wspXformat" controltovalidat

我正试图以我的方式解决这个问题

我有一个文本框,我必须验证一个数据,它必须是一个数字,范围从-90到90 不带逗号,只允许点 例如: 2.34允许 3,54禁止 134禁止 -78允许

我已经创建了此表达式:^[-+]?[0-9]*.?[0-9]+$它支持我的数据格式化,但不验证数据范围,有人能为我推荐一个盗用此表达式的解决方案吗

<asp:RegularExpressionValidator runat="server" id="wspXformat" 
controltovalidate="textBox1" validationexpression="^[-+]?[0-9]*\.?[0-9]+$" errormessage="Data Error" /><br />

我知道我可以用代码实现,但也许有更简单的方法

您应该使用:


检查-90和+90之间的数字

有效数字在小数点前有一个或两个有效数字。它们前面可能有一个符号和一些不重要的零

忽略前导符号和任何前导零似乎有三种情况,因此可能有一个交替的正则表达式(即
)会很有用。案件是

value = 90
10 <= value < 90
0 <= value < 10
(使用Notepad++6.5.5进行测试。)

前导的
^
和尾随的
$
使其检查整个字符串。
[-+]?0*
用于可选符号和可选前导零。
(| | | |)
在可选符号和可选前导零之后分隔四个大小写。
90(.0*)?
精确地处理90,并带有可选的零分数部分。
[1-8]\d(\.\d*)?
处理10到89(含10到89)之间的任何内容,以及可选的小数部分。
[0-9](\.\d*)?
处理0到9(包括0到9)之间的任何内容,以及可选的小数部分。
\.\d*
处理没有整数的分数


检查-180和+180之间的数字

可以使用与上述相同的样式。首先找到可能的字符串集,然后组合成正则表达式

<asp:RegularExpressionValidator runat="server" id="wspXformat" 
controltovalidate="textBox1" validationexpression="^[-+]?[0-9]*\.?[0-9]+$" errormessage="Data Error" /><br />
如前所述,允许使用可选符号和前导零。数字本身可以是

value = 180
100 <= value < 180
10 <= value < 100
0 <= value < 10
.0 <= value < 1  (and no integral part)
上述两个备选方案可以很容易地结合起来。
\d\d(\.\d*)?\d(\.\d*)?
部分可以更改为
\d\d(?\.\d*)?
。将整体表达式缩短为:

^[-+]?0*(180(.0*)?|(1[0-7]\d(\.\d*)?)|\d\d?(\.\d*)?|\.\d*)$

RangeValidator不允许输入带点的数字,也许有一个解决方案,但它是否与文化表达有关?我解决了它,不确定是以正确的方式,但现在它的工作方式是我想要的。我在Kobi所示创建的代码范围验证程序中进行了还原,并在Web.config页面全球化注册表中添加了:非常感谢,您的示例我工作得很好,让我对正则表达式有了一点了解,并且我能够使正则表达式的范围从-180到180,只是为了确定您是否可以查看我的表达式:^[-+]?0*(180(.0*)?|[0-9]\d(\.\d*)?|(1[0-7]\d(\.\d*)?)|.\d*)$似乎做得很好,但我想知道我没有做错什么statements@lolek您的180代码是一个很好的开始,但它不允许0到10之间的数字,例如
9
6.4321
。您的尝试还包括
|(1[0-7]\d(\.\d*)?)|
不需要外部支架的地方。
^[-+]?0*(180(.0*)?|(1[0-7]\d(\.\d*)?)|\d\d(\.\d*)?|\d(\.\d*)?|\.\d*)$
^[-+]?0*(180(.0*)?|(1[0-7]\d(\.\d*)?)|\d\d?(\.\d*)?|\.\d*)$