2012-03-19 128 views
5

我需要正則表達式來檢查String是否至少有4個唯一字符。例如,如果一個字符串是"test"那麼它會失敗,因爲它有三個不同的字符,但是如果一個字符串是"test1"那麼它就會通過。需要正則表達式檢查字符串中至少有4個不同的字符

+0

做**不**使用 「正則表達式」 這一點。正則表達式**不能很好地處理這個問題。 (是的,這是*可能*,fsvo,但這是一場噩夢,並限於相對較小的上限長度。) – 2012-03-19 06:07:50

+0

實際上,這並不經常。 – Matthias 2012-03-19 06:09:19

回答

6

我不知道如何用正則表達式做這件事,我也不期望這是解決問題的好方法。下面是與常規的JavaScript一個更通用的功能:

function countUniqueChars(testVal) { 
    var index = {}; 
    var ch, cnt = 0; 
    for (var i = 0; i < testVal.length; i++) { 
     ch = testVal.charAt(i); 
     if (!(ch in index)) { 
      index[ch] = true; 
      ++cnt; 
     } 
    } 
    return(cnt); 
} 

function hasFourUniqueChars(testVal) { 
    return(countUniqueChars(testVal) >= 4); 
} 

你可以看到它在這裏工作:http://jsfiddle.net/jfriend00/bqBRv/

+0

這真的有用嗎? – 2012-03-19 06:14:37

+0

@ChuckNorris「查牙諾里斯牙醫後」 – mowwwalker 2012-03-19 06:16:27

+0

是的,它的工作原理。參見[jsFiddle](http://jsfiddle.net/jfriend00/bqBRv/)。 – jfriend00 2012-03-19 06:17:05

1

如果你是開放的使用額外的庫,undescore.js提供了一些實用的功能,可以使這是一個非常短和甜查詢:

function countUniqueCharacters(value) { 
    return _.uniq(value.split("")).length; 
} 
0
var str = "abcdef" 
var counter = 0; 
hash = new Object(); 
var i; 
for(i=0; i< str.length; i++){ 
    if(!hash[str.charAt(i)]){ 
    counter +=1; hash[str.charAt(i)]=true 
    } 
} 

if(counter < 4){ 
    console.log("error"); 
} 
+0

這不會忽略最後一個字符嗎? – 2012-03-19 06:25:52

+0

字符串的最後一個符號有string.length - 1個位置 – gayavat 2012-03-19 06:34:14

+1

但是,只有將字符串轉換爲2,注意「i 2012-03-19 06:39:29

相關問題