繁体   English   中英

JavaScript - 正则表达式删除代码/特殊字符/数字等

[英]JavaScript - Regex to remove code / special characters / numbers etc

回答@Wiktor Stribiżew 建议:

function myValidate(word) {
    return (word.length === 1 || /[^A-Z]/i.test(word)) ? true : false;
    }

您好,在创建数组的过程中,我有一个函数不允许将具有某些字符等的单词添加到数组中

    function myValidate(word) {
        // No one letter words
        if (word.length === 1) {
            return true;
        }
        if (word.indexOf('^') > -1 || word.indexOf('$') > -1) {
            return true;
        }
        return false;
    }

这似乎不是解决这个问题的正确方法,我一直在研究一个可以处理它但没有成功实施它的正则表达式,尝试了很多努力,例如:

if (word.match('/[^A-Za-z]+/g') ) {
            return true;
        }

有人可以阐明处理此问题的正确方法吗?

我建议使用更简单的解决方案:

 function myValidate(word) { return (word.length === 1 || /[^AZ]/i.test(word)) ? false : true; } var words = ["Fat", "Gnat", "x3-2741996", "1996", "user[50]", "definitions(edit)", "synopsis)"]; document.body.innerHTML = JSON.stringify(words.filter(x => myValidate(x)));

在哪里:

  • word.length === 1检查字符串长度
  • /[^AZ]/i.test(word)检查字符串中是否存在非 ASCII 字母符号

如果满足上述任何条件,则从数组中取出单词。 剩下的就剩下了。

编辑:使用test而不是match

您想使用test()是因为它返回一个布尔值,告诉您是否匹配正则表达式。 相反, match()总是返回匹配的元素。 这些可以通过强制转换为true 这不是你想要的。

总而言之,你可以只使用这个单行( if需要,也没有引号,不能再简单了):

return word.test(/^[a-zA-Z][a-zA-Z]+$/); // two letter words

您应该将字符列入白名单而不是列入黑名单。 这是安全的原则之一。 在你的情况下,不要告诉什么是错的,而要告诉什么是对的:

if (word.test('/^[a-zA-Z]+$/')) { // two letter words
    return false;
}

对于仅包含[a-zA-Z]字符的所有单词,这将返回 false。 我想这就是你想要的。

相反,您的正则表达式通过使用前导^否定字符组来查找非法字符。


两个建议:

  1. 只需以积极的方式(没有否定)使用正则表达式,它就会更容易理解。

  2. 此外,验证函数通常对好的数据返回true ,对坏的数据返回false

这种方式更具可读性:

if (validate(data))
{
    // that's some good data we have here!
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM