【问题标题】:'IsNullOrWhitespace' in JavaScript?JavaScript 中的“IsNullOrWhitespace”?
【发布时间】:2026-01-12 23:00:01
【问题描述】:

是否有与 .NET 的 String.IsNullOrWhitespace 等效的 JavaScript,以便我可以检查客户端的文本框是否有任何可见文本?

我宁愿先在客户端执行此操作,也不愿回发文本框值并仅依赖服务器端验证,即使我也会这样做。

【问题讨论】:

  • 您不需要专门的功能。只需测试这个表达式:x.value.trim() === ''(其中x 是对输入元素的引用)。如果值只是空格,则此表达式将返回 true,否则返回 false。为这样一个简单的任务使用专用功能是大材小用。 (注意:您需要为 IE8 及更低版本实现 trim()。这是一项简单的任务,无论如何您都想做。)
  • 好吧,文本框的值不能为空,所以这只是浪费检查。
  • "文本框的值不能为空。"这可能是真的,但其他一百万个字符串可以。我在日期选择器上有一个自定义敲除绑定,它可以为空。

标签: javascript .net string is-empty isnullorempty


【解决方案1】:

对于简洁的现代跨浏览器实现,只需执行以下操作:

function isNullOrWhitespace( input ) {
  return !input || !input.trim();
}

这是jsFiddle。备注如下。


currently accepted answer 可以简化为:

function isNullOrWhitespace( input ) {
  return (typeof input === 'undefined' || input == null)
    || input.replace(/\s/g, '').length < 1;
}

利用虚假,甚至进一步:

function isNullOrWhitespace( input ) {
  return !input || input.replace(/\s/g, '').length < 1;
}

trim() is available in all recent browsers,所以我们可以选择删除正则表达式:

function isNullOrWhitespace( input ) {
  return !input || input.trim().length < 1;
}

并在混合中添加更多的虚假,产生最终(简化)版本:

function isNullOrWhitespace( input ) {
  return !input || !input.trim();
}

【讨论】:

  • 如果输入不是字符串,这可能会因Uncaught TypeError: input.trim is not a function 而失败。
【解决方案2】:

roll your own:

很简单
function isNullOrWhitespace( input ) {

    if (typeof input === 'undefined' || input == null) return true;

    return input.replace(/\s/g, '').length < 1;
}

【讨论】:

  • g = 全局,i = 不区分大小写。实际上可能不需要 i.默认情况下,javascript replace 仅替换第一个匹配项,但使用 g 替换所有实例。
  • 已更新以支持未定义。您的其他测试用例在进入此方法@Rhyous 之前失败。
  • 为什么使用正则表达式而不是trim()
  • 这是在 2011 年发布的,在 trim() 还没有成为规范的一部分之前 - 但是是的,你现在可以使用 trim() 了! (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)
【解决方案3】:

不,但你可以写一个

function isNullOrWhitespace( str )
{
  // Does the string not contain at least 1 non-whitespace character?
  return !/\S/.test( str );
}

【讨论】:

  • 应该是!/\S/.test(typeof(str) == 'string' ? str : '')。如果不是,null,undefined,任何对象都会返回true。
  • 我会写成!str || !/\S/.test(str);
  • 无,但您正在编写一个可以在其他上下文中使用的通用函数 :)
  • @cwolves 我想我们只是对函数名称中的“null”进行了不同的解释。我认为它是“空字符串”,而不是实际的 null 值。 en.wikipedia.org/wiki/Empty_string
  • 这对于空值和未定义值都失败:plnkr.co/edit/zWruFu?p=preview
【解决方案4】:

试试这个

检查字符串是否未定义、null、不是字符串类型、空或空格(s

/**
  * Checks the string if undefined, null, not typeof string, empty or space(s)
  * @param {any} str string to be evaluated
  * @returns {boolean} the evaluated result
*/
function isStringNullOrWhiteSpace(str) {
    return str === undefined || str === null
                             || typeof str !== 'string'
                             || str.match(/^ *$/) !== null;
}

你可以这样使用它

isStringNullOrWhiteSpace('Your String');

【讨论】:

    【解决方案5】:

    你必须自己写:

    function isNullOrWhitespace(strToCheck) {
        var whitespaceChars = "\s";
        return (strToCheck === null || whitespaceChars.indexOf(strToCheck) != -1);
    }
    

    【讨论】:

    • 此技术仅适用于诸如 "" 之类的空白字符串,不适用于具有多个空白字符的字符串。
    【解决方案6】:

    trim() 是 JS 缺少的一个有用的字符串函数..

    添加:

    String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,"") }
    

    然后:if (document.form.field.value.trim() == "")

    【讨论】:

    • String.prototype.trim 自 v5.1 / 2011 年 6 月起成为 JavaScript 的一部分
    【解决方案7】:

    提取两个最佳答案的相关部分,你会得到这样的结果:

    function IsNullOrWhitespace(input) {
        if (typeof input === 'undefined' || input == null) return true;
        return !/\S/.test(input); // Does it fail to find a non-whitespace character?
    }
    

    此答案的其余部分仅适用于那些对此答案和德克斯特答案之间的性能差异感兴趣的人。两者都将产生相同的结果,但此代码稍快一些。

    在我的电脑上,对以下代码使用 QUnit 测试:

    var count = 100000;
    var start = performance.now();
    var str = "This is a test string.";
    for (var i = 0; i < count; ++i) {
        IsNullOrWhitespace(null);
        IsNullOrWhitespace(str);
    }
    var end = performance.now();
    var elapsed = end - start;
    assert.ok(true, "" + count + " runs of IsNullOrWhitespace() took: " + elapsed + " milliseconds.");
    

    结果是:

    • RegExp.replace 方法 = 33 - 37 毫秒
    • RegExp.test 方法 = 11 - 14 毫秒

    【讨论】:

      【解决方案8】:

      您可以使用正则表达式/\S/ 来测试字段是否为空格,并将其与空检查结合使用。

      例如:

      if(textBoxVal === null || textBoxVal.match(/\S/)){
          // field is invalid (empty or spaces)
      }
      

      【讨论】:

      • 这不会检查空值
      • 如果 textBoxVal 为空,则条件的第一部分将抛出。您首先需要 textBoxVal === null。