0

嘿家伙应该是一个简单的...我有一些 javascript 将我的输入值转换为货币值。问题是如果我尝试输入 .5 它将失败这是我的代码:

function handleCurrency(formName,fieldName)
{
    var enteredValue = document.forms[formName].elements[fieldName].value;

    if ( enteredValue.isCurrency() )
    {
        alert("This is currency " + enteredValue )
        // Put the nicely formatted back into the text box.
        document.forms[formName].elements[fieldName].value = enteredValue.toCurrency();
    }
}

jsp:

 <td><input type="text" name="replacementCost" onchange="handleCurrency('NsnAdd','replacementCost')" value="<ctl:currencyFormat currency='${form.replacementCost}'/>" onkeypress="javascript:return noenter();" <c:if test="${!lock.locked}">disabled="disabled"</c:if> /></td>

我怎样才能使 .5 也可以被格式化?

自定义 JavaScript:

var patternWithCommas = new RegExp("^\\s*\\$?-?(\\d{1,3}){1}(,\\d{3}){0,}(\\.\\d{1,2})?\\s*$");
var patternWithoutCommas = new RegExp("^\\s*\\$?-?\\d+(\\.\\d{1,2})?\\s*$");

function stringIsCurrency()
{
if (patternWithoutCommas.test(this))
{
    return true;
}
else if (patternWithCommas.test(this))
{
    return true;
}
return false;
}

function stringToCurrency()
{
if (this == '') return this;

var str = this.replace(/[$,]+/g,'');

sign = (str == (str = Math.abs(str)));
str = Math.floor(str*100+0.50000000001);
cents = str%100;
str = Math.floor(str/100).toString();

if (cents<10) cents = "0" + cents;

for (var i = 0; i < Math.floor((str.length-(1+i))/3); i++)
{
    str = str.substring(0,str.length-(4*i+3))+','+
          str.substring(str.length-(4*i+3));
}

str = '$' + ((sign)?'':'-') + str + '.' + cents;

return str;
}

String.prototype.isCurrency = stringIsCurrency;
String.prototype.toCurrency = stringToCurrency;

基本上它需要允许 0.5 而不仅仅是 0.5

这需要更新:

var patternWithCommas = new RegExp("^\\s*\\$?-?(\\d{1,3}){1}(,\\d{3}){0,}(\\.\\d{1,2})?\\s*$"); 
4

1 回答 1

1

您还没有显示您的代码isCurrency

这是我的做法:

function isCurrency( val )
{
    return /^\$?(?:\d[\d,]*)?(?:.\d\d?)?$/.test( val );
}

在此处查看实际操作:http ://regexr.com?3103a


现在您已经提供了代码,这是我提出的解决方案。

虽然有很多事情我会做不同的事情,但
为了保持代码的精神,只需更改以下内容:

var patternWithCommas = new RegExp("^\\s*\\$?-?(\\d{1,3}){1}(,\\d{3}){0,}(\\.\\d{1,2})?\\s*$");
var patternWithoutCommas = new RegExp("^\\s*\\$?-?\\d+(\\.\\d{1,2})?\\s*$");

对此:

var patternWithCommas = /^\s*\$?-?((\d{1,3}){1}(,\d{3})?)?(\.\d{1,2})?\s*$/;
var patternWithoutCommas = /^\s*\$?-?(\d+)?(\.\d{1,2})?\s*$/;

这将使美元金额成为可选的。

于 2012-05-17T18:14:33.523 回答