【问题标题】:Why /^[a-zA-Z0-9_]+$/ and /^[a-zA-Z0-9_]{1,}$/ accepts empty string为什么 /^[a-zA-Z0-9_]+$/ 和 /^[a-zA-Z0-9_]{1,}$/ 接受空字符串
【发布时间】:2019-05-03 06:14:44
【问题描述】:

我正在写 Nuxt Web 应用程序,我遇到了一些奇怪的事情。

export default {
    name: 'post',
    validate({ params }) {
        return /^[a-zA-Z0-9_]+$/.test(params.postname)
    }
}

这接受“空字符串”,即使它不应该。如果它不接受空字符串,应该会显示 404 错误页面,但它不会。

export default {
    name: 'post',
    validate({ params }) {
        return /^[a-zA-Z0-9_]{1,}$/.test(params.postname)
    }
}

这也是如此。据我所知,+{1,} 是相同的。为什么+{1,} 接受空字符串?

【问题讨论】:

  • Why + accepts empty string? 不应该。您确定您正在测试正确的字符串吗?也可以试试console.logging。另请注意,字母 + 数字 + 下划线简化为 \w - 根本不需要字符集
  • /^[a-zA-Z0-9_]+$/.test("") = false
  • 这是完整代码 浏览器向我显示 test: "" 当我尝试访问https://localhost:3000/posts/
  • 就像我说的,在validate 中尝试console.logging,+ 不应该接受空字符串,也许函数没有运行,或者它的返回值没有被使用,但是对空字符串的测试评估为false,除非引擎中存在错误,这不太可能
  • 它被字符串化为'undefined',匹配。

标签: javascript regex nuxt.js


【解决方案1】:

如果字符串未定义,test() 方法将返回 true。所以使用:

return params.postname !== undefined && /^[a-zA-Z0-9_]+$/.test(params.postname);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多