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

时间:2017-08-23 13:52:44

标签: javascript

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

为了方便起见,我真的只关心第一个字符,只有它不是非数字。

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

更新:我正在使用 itemCost = itemCost.replace(/ \ $ /,'');

但现在我正试图打开任何货币符号。

5 个答案:

答案 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字符值,但这只是第一个想到的。