求大虾们指点一个C#的正则

pgdoryoku 2009-09-21 10:05:02
一个c#的正则要求用户只能输入小数,且小数点保存两位,而且当用户输入的数字没有小数的时候,要自动填充小数“.00”进去。

实在想不出来了,求大侠们指点下,叩谢了。。
...全文
159 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
pgdoryoku 2009-09-21
  • 打赏
  • 举报
回复
好的。。非常感谢你了。。
但分已经结了,不能给你配分实在不好意思了。
十八道胡同 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 pgdoryoku 的回复:]
引用 12 楼 lcl_data 的回复:
你试试不久知道了


如果有问题,客户会杀了我的。= =
[/Quote]
这个正则你可以用控制台试试的...
我就在控制台试的。。。
十八道胡同 2009-09-21
  • 打赏
  • 举报
回复
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
pgdoryoku 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lcl_data 的回复:]
你试试不久知道了
[/Quote]

如果有问题,客户会杀了我的。= =
十八道胡同 2009-09-21
  • 打赏
  • 举报
回复
你试试不久知道了
pgdoryoku 2009-09-21
  • 打赏
  • 举报
回复
不是差了个“?:”吗?

区别是什么呢?
-过客- 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pgdoryoku 的回复:]
O O  等等,那正则用哪一个才是正确的。

1、Regex reg = new Regex(@"^(?:[1-9][0-9]*|0)(\.[0-9]{2})?$");
2、Regex reg = new Regex(@"^(?:[1-9][0-9]*|0)(?:\.[0-9]{2})?$");
[/Quote]

结果是一样的,用在这里基本上没什么区别
后面的风格统一,前后都用了非捕获组,主要是为了提高效率,但是因这为个正则简单,所以没什么区别
pgdoryoku 2009-09-21
  • 打赏
  • 举报
回复
O O 等等,那正则用哪一个才是正确的。

1、Regex reg = new Regex(@"^(?:[1-9][0-9]*|0)(\.[0-9]{2})?$");
2、Regex reg = new Regex(@"^(?:[1-9][0-9]*|0)(?:\.[0-9]{2})?$");
pgdoryoku 2009-09-21
  • 打赏
  • 举报
回复
NICE WORK ^_^bbbbbb
多谢lxcnn大侠,解决了,结贴。
-过客- 2009-09-21
  • 打赏
  • 举报
回复
呵呵,正则前后风格不太一致

Regex reg = new Regex(@"^(?:[1-9][0-9]*|0)(?:\.[0-9]{2})?$");
-过客- 2009-09-21
  • 打赏
  • 举报
回复
winform程序就很简单了

            Regex reg = new Regex(@"^(?:[1-9][0-9]*|0)(\.[0-9]{2})?$");
if (reg.IsMatch(textBox1.Text))
{
if (textBox1.Text.IndexOf(".") == -1)
{
textBox1.Text += ".00";
}
}
else
{
MessageBox.Show("输入格式错误!");
}
pgdoryoku 2009-09-21
  • 打赏
  • 举报
回复
泪奔,谢谢大家的热情帮助,我对不起大家。。。。

我要做的程序时c# windowform 的,不能用js的函数。。。能原谅小弟没吧问题描述清楚再施舍个winform的填充函数吗。。。~~o(>_<)o ~~泪奔
wuyq11 2009-09-21
  • 打赏
  • 举报
回复
^[0-9]\d*\.\d{0,2}$
function check_value(obj)
{
if(obj.value=="")
return;
val=parseFloat(obj.value);
if(isNaN(val))
{
alert("非法的数字");
obj.focus();
return;
}
if(val<0)
{
alert("数值不能小于0");
obj.focus();
return;
}
value_array=obj.value.split(".");
if(value_array.length==1)
{
obj.value=value_array[0]+".00";
return;
}
}
pgdoryoku 2009-09-21
  • 打赏
  • 举报
回复
谢谢lxcnn兄弟。。

我要自动填充小数目的是要打印报表用。。不然所有列表的数字就一个文本框是整数,非常别扭。

能提示下函数的设计原理吗?
wxg22526451 2009-09-21
  • 打赏
  • 举报
回复
<html>
<head>

<script>
//返回一个浮点数
function getDouble(str)
{
//如果为空,则通过校验
if(str == "")
return 0;
else
{
if(/^((\-|\+)?)(\d+)((.{1})(\d+))?$/g.test(str))
{
return parseFloat(str);
}
else if(/^((\-|\+)?)((\d+,)*)(\d+)((.{1})(\d+))?$/g.test(str))
{
return parseFloat(str.replace(/[^0-9\.\-]/g,''));
}
else
{
return '0.00';
}
}
}

function formatNumber(num,cent,isThousand)
{
num = num.toString().replace(/[^0-9\.\-]/g,'');
if(isNaN(num))//检查传入数值为数值类型.
num = "0";
if(isNaN(cent))//确保传入小数位为数值型数值.
cent = 0;
cent = parseInt(cent);
cent = Math.abs(cent);//求出小数位数,确保为正整数.

if(isNaN(isThousand))//确保传入是否需要千分位为数值类型.
isThousand = 0;
isThousand = parseInt(isThousand);
if(isThousand < 0)
isThousand = 0;
if(isThousand >=1) //确保传入的数值只为0或1
isThousand = 1;

sign = (num == (num = Math.abs(num)));//获取符号(正/负数)
//Math.floor:返回小于等于其数值参数的最大整数
num = Math.floor(num*Math.pow(10,cent)+0.50000000001);//把指定的小数位先转换成整数.多余的小数位四舍五入.
cents = num%Math.pow(10,cent); //求出小数位数值.
num = Math.floor(num/Math.pow(10,cent)).toString();//求出整数位数值.
cents = cents.toString();//把小数位转换成字符串,以便求小数位长度.
while(cents.length<cent){//补足小数位到指定的位数.
cents = "0" + cents;
}
if(isThousand == 0) //不需要千分位符.
return (((sign)?'':'-') + num + '.' + cents);
//对整数部分进行千分位格式化.
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
{
num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
}
if(cent==0)
return (((sign)?'':'-') + num)
return (((sign)?'':'-') + num + '.' + cents);
}
</script>
</head>
<body>
<input type='text' id='aaa' onchange="this.value=formatNumber(getDouble(this.value),2,false)" >

</body>
</html>
-过客- 2009-09-21
  • 打赏
  • 举报
回复
验证可以用下面的正则
^(?:[1-9][0-9]*|0)\.[0-9]{2}$


还有自动填充小数功能就只能在函数里处理了
楼主是要在什么时候进行验证呢,如果是提交时,似乎自动填充小数功能没有什么意义

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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