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だけでなく.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 に答える