![](/img/trans.png)
[英]Javascript Regex to remove any spaces, special characters and numbers
[英]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。 我想這就是你想要的。
相反,您的正則表達式通過使用前導^
否定字符組來查找非法字符。
兩個建議:
只需以積極的方式(沒有否定)使用正則表達式,它就會更容易理解。
此外,驗證函數通常對好的數據返回true
,對壞的數據返回false
。
這種方式更具可讀性:
if (validate(data))
{
// that's some good data we have here!
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.