2012-03-19 19 views
5

Necesito Regex que compruebe si un String tiene al menos 4 caracteres únicos. Por ejemplo, si una cadena es "test", falla porque tiene tres caracteres diferentes, pero si una cadena es "test1", pasa.Necesita Regex que verifique al menos 4 caracteres diferentes en la cadena

+0

hacer ** ** No Use una "expresión regular" para esto. Una expresión regular ** no puede manejar este problema ** bien. (Sí, es * posible *, fsvo, pero es una pesadilla y se limita a una longitud de límite superior relativamente pequeña.) –

+0

En realidad, eso no es normal. – Matthias

Respuesta

6

No estoy seguro de cómo hacer eso con una expresión regular, ni supongo que sea una buena manera de resolver el problema. He aquí una función de propósito más general con javascript normal:

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

se puede ver que funcione aquí: http://jsfiddle.net/jfriend00/bqBRv/

+0

¿Esto realmente funciona? –

+0

@ChuckNorris "Chuck Norris después del dentista" – mowwwalker

+0

Sí, funciona. Ver [jsFiddle] (http://jsfiddle.net/jfriend00/bqBRv/). – jfriend00

1

Si usted está abierto a la utilización de las bibliotecas adicionales, undescore.js proporciona algunas funciones de utilidad que pueden hacer de este un muy corto y consulta dulce:

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

¿Esto no ignora el último carácter? –

+0

No. El último símbolo de la cadena tiene string.length - 1 posición – gayavat

+1

Pero solo interate hasta string.length - 2, fíjate en "i

Cuestiones relacionadas