我在表格上有一个文本字段,允许个人输入价格。我正在尝试允许在此字段中输入其他货币符号,但我在幕后的逻辑需要去除任何货币符号。
为了方便起见,我真的只关心第一个字符,而且只关心当它是一个非数字时。
否则,我无法使用删除价格字段中任何小数点或逗号的解决方案,否则我的计算将不起作用。
更新:我目前正在使用 itemCost = itemCost.replace(/\$/, ''(;
但现在我正试图向任何货币符号开放它。
您可以像访问数组一样访问字符串。看看字符串位置 0 处的字符 -
var inputString = '...' // whatever the user entered
var firstChar = inputString[0];
if (!Number.isInteger(firstChar)) {
inputString = inputString.substr(1)
}
我在这里使用String.subStr
函数从第一个索引开始创建字符串的副本。
请考虑该解决方案假定提供的字符串只有一个货币符号。诸如"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
为什么不将字符列入白名单?
'$99,99'.match(/[0-9]+[,.]{0,1}[0-9]*/)
你肯定会想完善它,我写得很快......
建议的正则表达式所做的是确保我们有一个或多个数字,然后可能是,
或.
和 0 或更多数字。
我最想在这个答案中指出的是,虽然只保留数字字符很容易,但它绝不是确保用户输入了正确的货币。也无法知道输入1,337
的用户是指1,337.00
还是1.337
有几种方法可以做到这一点...一种方法是将输入到数组中,检查第一个元素上的 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 字符值,但这只是想到的第一个。
Javscript 函数可以是
检查第一个字母为数字的功能
function chkNumeric(inputtxt)
{
var letterNumber = '^[0-9]{1,}[ a-zA-Z0-9]*$';
if((inputtxt.value.match(letterNumber))
{
return true;
}
else
{
return false;
}
}
你可以使用 parseInt((
parseInt()
分析字符串并返回一个整数。
如果第一个字符无法转换为数字,则parseInt()
返回NaN
。
parseInt('Hello') // returns NaN
此外,最好在使用parseInt()
之前trim()
字符串
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')
}