【问题标题】:How to check string against whitelisted characters in JavaScript?如何根据 JavaScript 中的白名单字符检查字符串?
【发布时间】:2016-04-05 21:36:12
【问题描述】:

我有一些代码可以转换用户输入以确保唯一允许的字符是 abcdefghijklmnopqrstuvwxyz-0123456789

https://jsfiddle.net/py4pnr0L/

value = 'GHJHlk;sxa787BVK'
value = value.toLowerCase()
value = value.replace(/[^a-z0-9\-]/gi, '-')
console.log(value)

返回:ghjhlk-sxa787bvk

我将如何不进行转换,而只是测试给定的字符串是否包含允许范围之外的字符?

我只想知道给定输入字符串的真/假。

我使用的是 ES2015,所以如果使用 ES2015 可以获得最干净的解决方案,那很好。

【问题讨论】:

  • 你的意思是/[^a-zA-Z0-9]/.test(value)
  • 允许的字符集是否相同?如果是,您可以将自己的否定字符类与.test() 一起使用。 /[^a-z0-9-]/i.test(value)
  • @WiktorStribiżew 为什么在 i.test(value) 与 .test(value) 方面您的答案和 anubhava 会有所不同。 “我”是做什么的?
  • 呃,这是你的正则表达式 :) /i 是区分大小写的修饰符,/[a-z]/i = /[a-zA-Z]/。此外,我的正则表达式包括一个连字符,而 anubhava 没有。是你要找的代码吗?

标签: javascript regex validation ecmascript-6


【解决方案1】:

你可以使用 match 方法,尝试类似:

value = 'GHJHlksxa787BVK';
 
console.log(!value.match(/[^a-zA-Z0-9\-]/))

【讨论】:

    【解决方案2】:

    你可以使用RegExp#test()方法:

    在正则表达式和指定字符串之间执行匹配搜索。返回truefalse

    此方法不应使用/g 修饰符,以便lastIndex 属性不会弄乱结果。详情请见Why RegExp with global flag in Javascript give wrong results?

    您的正则表达式/[^a-z0-9-]/i(匹配任何不在a-zA-Z0-9 范围内的字符,而不是-)可以在这里使用。只需取出/g

    var value = "GHJHlksxa787BVK";
    document.body.innerHTML = /[^a-z0-9-]/i.test(value);

    /i 是不区分大小写的修饰符,/[a-z]/i = /[A-Za-z]/

    【讨论】:

    • 问题的一个微妙之处/我的代码是白名单不允许允许大写字符。我猜这意味着从你的正则表达式中取出尾随的“i”?
    • 现在,/[^a-z0-9-]/i 检查字符串是否包含除A-Za-z0-9- 以外的字符。如果您想在存在A-Z 时触发true,请移除/i 修饰符。
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多