Проверка JavaScript для пробелов - PullRequest
2 голосов
/ 03 июня 2011

У меня есть эта функция, но я хочу проверить пробелы только спереди и сзади, а не посередине, прежде чем я отправлю обратно, что я могу с ней сделать ...

function validateNumeric() {
  var val = document.getElementById("tbNumber").value;
  var validChars = '0123456789.'; 

  for(var i = 0; i < val.length; i++){ 
    if(validChars.indexOf(val.charAt(i)) == -1){
    alert('Please enter valid number');
    return false; 
    } 
  }
  return true; 
  }

Ответы [ 5 ]

8 голосов
/ 03 июня 2011

Время для регулярных выражений .

function startsOrEndsWithWhitespace(str)
{
    return /^\s|\s$/.test(str);
}

Тесты:

> /^\s|\s$/.test('123454')
  false
> /^\s|\s$/.test('123 454')
  false
> /^\s|\s$/.test(' 123454')
  true
> /^\s|\s$/.test(' 123454 ')
  true
> /^\s|\s$/.test('123454 ')
  true

если я не хочу принимать 1 1нужно поменять

function containsWhitespace(str)
{
    return /\s/.test(str);
}

Тесты:

> /\s/.test('123454')
  false
> /\s/.test('123 454')
  true
> /\s/.test(' 123454')
  true
> /\s/.test('123454 ')
  true
> /\s/.test(' 123454 ')
  true
> /\s/.test(' 123 454 ')
  true
0 голосов
/ 03 июня 2011

Чтобы обрезать свою строку, вы можете написать что-то вроде этого, как было сказано ранее:

function trim(str){
    return str.replace(/^\s+|\s+$/g), '');
}

Но зачем?
Хотите, чтобы вы действительно хотели это:

function validateNumeric(str) {
    return !isNaN(parseFloat(str));
}

Обратите внимание, что ваш оригинальный код принимает что-то вроде "..." или "7.8..9" как числовое, что неверно.

Обновление : kennebec обратил мое внимание на тот факт,parseFloat() будет игнорировать завершающий мусор в конце строки.Поэтому я обращаю ваше внимание на эту альтернативу, приведенную в ответе на вопрос «Проверка чисел в JavaScript - IsNumeric ()» :

function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

(Оригинальный кредит поступает на CMS ).

0 голосов
/ 03 июня 2011
function trim (myString)
{
return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
} 

источник

0 голосов
/ 03 июня 2011

Для действительно простого решения, если вы можете использовать jQuery, используйте jQuery.trim () и сравните усеченную строку с оригиналом. Если не равно, то были пробелы, поэтому число является недействительным.

0 голосов
/ 03 июня 2011
function validateNumeric() {
  var val = document.getElementById("tbNumber").value;
  if (!/^\s*(?:\d+(?:\.\d*)?|\.\d+)\s*$/.test(val)) {
    alert('Please enter a valid number');
    return false; 
  }
  return true;
}

(?:\d+(?:\.\d*)|\.\d+) разбивается следующим образом:

  1. \d+ - любое количество цифр, например, 123
  2. (\.\d*)? необязательно соответствует дроби, например, .25 и. или пусто, но не. 1.2
  3. \.\d+ соответствует дроби без целочисленной части, как в .5, но не 1,5.
  4. (?:abc|def) группирует вещи и сопоставляет либо abc, либо def

/^\s*(?:\d+(?:\.\d*)|\.\d+)\s*$/ означает любое количество пробелов, за которыми следуют одна или несколько десятичных цифр, за которыми следует любое количество пробелов. Таким образом, он делает то же, что и цикл validChars, плюс пробелы в начале и конце.

...