读书人

正则表达式

发布时间: 2012-01-14 20:02:35 作者: rapoo

求一个正则表达式
现在在做一个会计科目的程序。用户输入会计科目的原则是这样的:
1.只能是数字或数字加分隔符号,且最后一位不能是分隔符号。
2.会计科目的分隔符号可以是.(小数点)或者-(减号),但不同时包含.(小数点)和-(减号)
3.分隔符号可能有多个,即会计科目可能有多级
例如:
以下会计科目是正确的:
1000
1000.01
1000.01.005
1000-01-05
2121
2121-34

但下面这样写就不对:
1000.01-1
1000-
2121.
123A

请问与正则表达式如何写,谢谢!



[解决办法]
//--两次 验证

Regex regi = new Regex(@ "(^\d[\d-]*\d$)|(^\d[\d\.]*\d$) ");
string inreg = "1.000.01.005 ";
if (regi.IsMatch(inreg))
{
regi = new Regex(@ "[^\d\.\d]|[^\d-\d] ");
if (!regi.IsMatch(inreg))
{
//全部成功做的你事
}
else
{
//遗憾2层验证失败...
}
}
else
//根本通不过...
[解决办法]
^\d+$|^\d+(-\d+){1,}$|^\d+(\.\d+){1,}$
[解决办法]
以上均测试通过
----------------------------------
Regex reg = new Regex(@ "^\d+$|^\d+(-\d+){1,}$|^\d+(\.\d+){1,}$ ");
string str = "1000.01-1 ";
MessageBox.Show(reg.IsMatch(str).ToString());
[解决办法]
楼上的正解 .
我那个有错.

^\d+$|^\d+(-\d+)+$|^\d+(\.\d+)+$


[解决办法]
leohuang(LEO) () 信誉:91 Blog 加为好友
^\d+$|^\d+(-\d+){1,}$|^\d+(\.\d+){1,}$


也是一种实现方法
不过这里用向后引用实现起来更通用一些.比如他要求,.-/等多个符号都合法的时候,^\d+(?:(\.|\-)\d+)?(?:\1\d+)*$就改起来就很方便了

[解决办法]
^\d+(([-|\.]{1})\d+(\2\d+)*)?$

这样可以?

读书人网 >VB Dotnet

热点推荐