Проверьте, является ли строка с запятой и точкой правильным десятичным числом Javascript, и извлеките числовое значение

#javascript #regex

Вопрос:

Я пытаюсь проверить свое поле ввода, проверяя, является ли строка правильным числом с запятой и точкой, и если да, получите значение

Я попробовал две функции, обе не работали должным образом:

 function isNumeric(str) {
    console.log(parseFloat(str.replace(/,/g,'')))  
    return !isNaN(str) amp;amp; // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
           !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail
  }


  const isValidNumber = (str) => {
      console.log(parseFloat(str.replace(/,/g,'')))
    //   return /^[0-9,.]*$/.test(str);
      return /^d{0,4}(?:[.,]d{1,3})?$/.test(str)
    //   return /^[0-9,]?.[0-9]/.test(str);
    // return /([0-9,.] )$/.test(str)
  }
 

тестовые примеры, которые я подготовил

 console.log(isNumeric("2"))//true
console.log(isNumeric("2,00,000"))//true
console.log(isNumeric("2,7,5,.34"))//false
console.log(isNumeric("2,450,0000.22.22"))//false
console.log(isNumeric("2q,3,4"))//false
 

Но это работает не так, как задумывалось, мне нужно регулярное выражение, чтобы исправить это. Также необходимо проверить, является ли parseFloat(str.replace(/,/g,'')) правильный способ извлечения значения

Ответ №1:

Вот общий шаблон регулярного выражения для сопоставления числа с соответствующим разделителем тысяч и необязательным десятичным компонентом:

 d{1,3}(?:,d{3})*(?:.d )?
 
 function isNumeric(input) {
    return /^d{1,3}(?:,d{3})*(?:.d )?$/.test(input);
}

console.log(isNumeric("2"));                 // true
console.log(isNumeric("2,000,000"));         // true
console.log(isNumeric("3.14159"));           // true
console.log(isNumeric("2,7,5,.34"));         // false
console.log(isNumeric("2,450,0000.22.22"));  // false
console.log(isNumeric("2q,3,4"));            // false 

Комментарии:

1. это работает нормально, но я внес небольшое изменение /^d{1,3}(?:,d{1,3})*(?:.d )?$/ , чтобы разместить число 2,00 000, так как это действительное число, я изменил цифру с, чтобы разместить 1-3 цифры после запятой