我是正则表达概念的新手。
我试图制作货币正则表达式
金额应为格式化数字字符串,千位分隔符使用',',小数分隔符使用'。'。
金额应精确到2位小数
金额应为非零值,正值
我试过这个
[HostProtection(SecurityAction.LinkDemand, ExternalThreading=true)]
public virtual IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{
if (!this.CanRead)
{
__Error.ReadNotSupported();
}
Interlocked.Increment(ref this._asyncActiveCount);
ReadDelegate delegate2 = new ReadDelegate(this.Read);
if (this._asyncActiveEvent == null)
{
lock (this)
{
if (this._asyncActiveEvent == null)
{
this._asyncActiveEvent = new AutoResetEvent(true);
}
}
}
this._asyncActiveEvent.WaitOne();
this._readDelegate = delegate2;
return delegate2.BeginInvoke(buffer, offset, count, callback, state);
}
但它没有满足我的要求。告诉我我是怎么做到的。
答案 0 :(得分:2)
如果您想禁用0.00
值,并允许没有数字分组符号的数字,则可以使用
/^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test(your_str)
请参阅regex demo
<强>解释强>:
^
- 字符串开头(?!0+\.0+$)
- 如果输入为零则未通过匹配的否定前瞻\d{1,3}
- 1至3位数字(?:,\d{3})*
- 0个逗号序列,后跟3位数字\.
- 一个文字点\d{2}
- 2位数(小数部分)$
- 字符串结束。
document.body.innerHTML = /^(?!0+\.0+$)\d{1,3}(?:,\d{3}|\d)*\.\d{2}$/.test("1,150.25");
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3}|\d)*\.\d{2}$/.test("0.25");
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("25");
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("0.00");
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("1150.25");
&#13;
答案 1 :(得分:1)
如果您的最小值为1.00
:
^[1-9]\d{0,2}(?:,\d{3})*\.\d\d$
这不允许前导零。