Javascript检查空格

时间:2011-06-03 13:59:01

标签: javascript spaces

我有这个功能,但是我想在前面和后面检查空格,而不是在中间我发回来之前我可以用它做什么......

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 个答案:

答案 0 :(得分:8)

regular expressions的时间。

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我需要改变什么

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

答案 1 :(得分:0)

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)将所有内容分组并匹配abcdef
  5. /^\s*(?:\d+(?:\.\d*)|\.\d+)\s*$/表示任意数量的空格后跟一个或多个十进制数字,后跟任意数量的空格。所以它做了validChars循环所做的加上在开始和结束时允许空格。

答案 2 :(得分:0)

对于一个非常简单的解决方案,如果你可以使用jQuery,使用jQuery.trim()并将修剪后的字符串与原始字符串进行比较。如果不相等,则有空格,因此数字无效。

答案 3 :(得分:0)

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

source

答案 4 :(得分:0)

为了修剪你的字符串,你可以写出类似这样的内容,如前所述:

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

但为什么要这么麻烦? 想要你真正想要的是:

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

请注意,您的原始代码接受“...”或“7.8..9”之类的数字,这是错误的。

更新:kennebec引起了我的注意,parseFloat()将忽略字符串末尾的尾随垃圾。因此,我在回答问题"Validate numbers in JavaScript - IsNumeric()"时提请您注意这个替代方案:

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

(原始信用额转到CMS)。