【问题标题】:Javascript check for spacesJavascript 检查空格
【发布时间】:2011-09-07 20:30:17
【问题描述】:

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

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; 
  }

【问题讨论】:

  • 检查前导/尾随空格与检查输入是否为有效数字有什么关系?

标签: javascript spaces


【解决方案1】:

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 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

【讨论】:

  • ... 或 return /^\s|\s$/.test(str); - à chacun son goût
  • @jack 从regexlib.com/… 开始寻找想法:)
  • @Pointy 在看到你的评论:)之前已经决定我更喜欢re.test(string)
  • 这实际上回答了糟糕的问题。 :J
  • 它会接受 1.1 因为我需要对带小数的数字说确定
【解决方案2】:
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+ 匹配没有整数部分的分数,如 0.5 但不匹配 1.5。
  4. (?:abc|def) 将事物组合在一起并匹配 abcdef

/^\s*(?:\d+(?:\.\d*)|\.\d+)\s*$/ 表示任意数量的空格,后跟一个或多个十进制数字,后跟任意数量的空格。所以它做了你的 validChars 循环所做的事情,并且允许在开始和结束处有空格。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      function trim (myString)
      {
      return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
      } 
      

      source

      【讨论】:

      • "检查空格" != "删除空格"
      【解决方案5】:

      如前所述,要修剪字符串,您可以编写如下内容:

      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)。

      【讨论】:

      • 这将接受以数字开头但之后可以包含任何内容的输入。 if(parseFloat(str)+''===str) 会做。
      猜你喜欢
      • 2012-07-27
      • 2017-05-27
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多