如果第一个字符在 JavaScript 中是非数字,如何从字符串中删除第一个字符?



我在表格上有一个文本字段,允许个人输入价格。我正在尝试允许在此字段中输入其他货币符号,但我在幕后的逻辑需要去除任何货币符号。

为了方便起见,我真的只关心第一个字符,而且只关心当它是一个非数字时。

否则,我无法使用删除价格字段中任何小数点或逗号的解决方案,否则我的计算将不起作用。

更新:我目前正在使用 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')
}

最新更新