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