我在表单上有一个文本字段,允许个人输入价格。我正在尝试允许其他货币符号输入此字段,但我在幕后的逻辑需要删除任何货币符号。
为了方便起见,我真的只关心第一个字符,只有它不是非数字。
否则,我无法使用在我的价格字段中删除任何小数点或逗号的解决方案,否则我的计算将无效。
更新:我正在使用 itemCost = itemCost.replace(/ \ $ /,'');
但现在我正试图打开任何货币符号。
答案 0 :(得分:2)
您可以使用与数组相同的方式访问字符串。看一下字符串零位的字符 -
var inputString = '...' // whatever the user entered
var firstChar = inputString[0];
if (!Number.isInteger(firstChar)) {
inputString = inputString.substr(1)
}
我正在使用String.subStr
function here从第一个索引开始创建字符串的副本。
请注意,尽管该解决方案假定所提供的字符串仅具有一个货币符号。 “USD 1.00”或“$ 1.00”等输入不适用于此解决方案。
另一种方法是从整个输入字符串中删除任何非数字字符(不包括小数点和逗号)。
var inputString = '...' // whatever the user entered
var priceString = inputString.replace(/[^0-9\.,]/, '')
// $1.00 -> 1.00
// USD #$1,000.00 -> 1,000.00
答案 1 :(得分:1)
为什么不将字符列入白名单?
'$99,99'.match(/[0-9]+[,.]{0,1}[0-9]*/)
你肯定想完善它,我写得很快......
建议的正则表达式的作用是确保我们有一个或多个数字,然后可能是,
或.
以及0位或更多位数。
我最想通过这个答案指出的是,虽然只保留数字字符很容易,但绝不会确定用户输入了正确的货币。也无法知道输入1,337
的用户是1,337.00
还是1.337
答案 2 :(得分:0)
您可以使用parseInt()
parseInt()
解析一个字符串并返回一个整数。
如果第一个字符无法转换为数字,则parseInt()
会返回NaN
。
parseInt('Hello') // returns NaN
在使用trim()
parseInt()
字符串也是个好主意
var money = '$123.45';
if( money ) { // check if variable is not null
money = money.trim();
}
console.log(parseInt(money));
// check NaN using isNaN function
if(isNaN(parseInt(money))) {
console.log('first charatcer is not a number')
money = money.substr(1);
console.log(money);
}
else {
console.log('first charatcer is a number')
}
答案 3 :(得分:0)
Javscript函数可能是
//将第一个字母检查为数字的功能
function chkNumeric(inputtxt)
{
var letterNumber = '^[0-9]{1,}[ a-zA-Z0-9]*$';
if((inputtxt.value.match(letterNumber))
{
return true;
}
else
{
return false;
}
}
答案 4 :(得分:0)
有几种方法可以做到这一点......一种方法是将输入变为数组,检查第一个元素上的isNaN,如果它不是数字则去掉它。
const input = '$123.45';
const otherInput = '23.34';
function splitCheck(someInput) {
let arrayInput = someInput.split('');
if (isNaN(arrayInput[0])) {
arrayInput.shift();
return arrayInput.join('');
} else {
return someInput;
}
}
splitCheck(input); // returns 123.45
splitCheck(otherInput); // returns 23.34
请注意,您也可以使用正则表达式,或者也可以检查数组中的ASCII字符值,但这只是第一个想到的。