求一个正则表达式

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

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

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

...全文
249 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sx8411 2007-04-06
  • 打赏
  • 举报
回复
来学习的
blackant2 2007-04-06
  • 打赏
  • 举报
回复
^\d+(([-|\.]{1})\d+(\2\d+)*)?$

这样可以?
asdfsadfasdfafa 2007-04-06
  • 打赏
  • 举报
回复
两次 验证
//涨知识了
以后又多了一个思路
leohuang 2007-04-06
  • 打赏
  • 举报
回复
楼上是正则高手,领教过了
RexZheng 2007-04-06
  • 打赏
  • 举报
回复
leohuang(LEO) () 信誉:91 Blog 加为好友
^\d+$|^\d+(-\d+){1,}$|^\d+(\.\d+){1,}$


也是一种实现方法
不过这里用向后引用实现起来更通用一些.比如他要求,.-/等多个符号都合法的时候,^\d+(?:(\.|\-)\d+)?(?:\1\d+)*$就改起来就很方便了
RexZheng 2007-04-06
  • 打赏
  • 举报
回复
To hertcloud(·£孙子兵法£·)

其实用一个正则就可以了

^\d+(?:(\.|\-)\d+)?(?:\1\d+)*$
hertcloud 2007-04-06
  • 打赏
  • 举报
回复
楼上的正解 .
我那个有错.

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

leohuang 2007-04-06
  • 打赏
  • 举报
回复
以上均测试通过
----------------------------------
Regex reg = new Regex(@"^\d+$|^\d+(-\d+){1,}$|^\d+(\.\d+){1,}$");
string str = "1000.01-1";
MessageBox.Show(reg.IsMatch(str).ToString());
leohuang 2007-04-06
  • 打赏
  • 举报
回复
^\d+$|^\d+(-\d+){1,}$|^\d+(\.\d+){1,}$
hertcloud 2007-04-06
  • 打赏
  • 举报
回复
//--两次 验证

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
//根本通不过...

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧