2012-03-19 29 views
5

Tôi cần Regex kiểm tra xem String có ít nhất 4 ký tự duy nhất không. Ví dụ, nếu một chuỗi là "test" thì nó không thành công vì nó có ba ký tự khác nhau nhưng nếu một chuỗi là "test1" thì nó sẽ chuyển.Cần Regex kiểm tra ít nhất 4 ký tự khác nhau trong chuỗi

+0

Do ** Không ** Sử dụng một "biểu thức chính quy" cho việc này. Cụm từ thông dụng ** không thể xử lý vấn đề này ** tốt. (Vâng, đó là * có thể *, fsvo, nhưng đó là một cơn ác mộng và giới hạn ở một độ dài trên tương đối nhỏ.) –

+0

Thực ra, điều đó không thường xuyên. – Matthias

Trả lời

6

Tôi không chắc chắn làm thế nào để làm điều đó với một regex, tôi cũng không mong rằng đó là một cách tốt để giải quyết vấn đề. Dưới đây là một chức năng mục đích tổng quát hơn với javascript thường xuyên:

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); 
} 

Bạn có thể thấy nó hoạt động ở đây: http://jsfiddle.net/jfriend00/bqBRv/

+0

Điều này có thực sự hoạt động không? –

+0

@ChuckNorris "Chuck Norris sau nha sĩ" – mowwwalker

+0

Có, nó hoạt động. Xem [jsFiddle] (http://jsfiddle.net/jfriend00/bqBRv/). – jfriend00

1

Nếu bạn đang mở để sử dụng thư viện bổ sung, undescore.js cung cấp một số chức năng tiện ích mà có thể thực hiện điều này rất ngắn và ngọt ngào truy vấn:

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

Điều này không bỏ qua ký tự cuối cùng? –

+0

Không. Biểu tượng cuối cùng của chuỗi có string.length - 1 vị trí – gayavat

+1

Nhưng bạn chỉ tương tác với chuỗi.length - 2, hãy chú ý đến "i

Các vấn đề liên quan