2012-09-10 39 views
5

Básicamente tengo la siguiente validación en mi página - es una regla de palabra en que una descripción en un cuadro de texto no puede ser mayor que 3 palabras excluyendo la palabra 'y'. He implementado la siguiente validación del lado del servidor en C# que está trabajando bienReplicar validación del lado del servidor C# en Javascript

if (Desc.Trim().ToString() != "") 
{ 
    MatchCollection collection = Regex.Matches(Desc.Replace("and", ""), @"[\S]+"); 

    if (collection.Count > 3) 
    { 
     ErrorMsg.Append("Description should contain at most 3 words(excluding 'and')."); 
     ErrorMsg.Append("\\n"); 
    } 
} 

Sin embargo estoy teniendo dificultades para conseguir el mismo trabajo en Javascript. He intentado lo siguiente pero no funciona hasta el momento, así que espero que alguien que tenga un mejor conocimiento de Javascript pueda ver el error. Tenga en cuenta que si es parte de una función de validación más grande que se activa en la página, las alertas estaban allí para ver si entró en esto si (que no es así). Cuando se elimina este bloque, el resto del JS en la página es funcionando bien.

if (Desc.val().trim() != "") 
{ 
    alert('1'); 
    !regexWordRule.test(Desc.val()); 
    alert('2'); 

    if (Desc.val().match(regexWordRule).length > 3) 
    { 
     errorText += "Description should contain at most 3 words(excluding 'and')."; 
    } 

    valid = false; 
} 

y la siguiente es mi regexWordRule definida en la parte superior del archivo js.

var regexWordRule = /[\S]+/; 

Respuesta

2

Se podría encontrar una mejor solución, pero este enfoque vino a la mente, así que estoy publicando:

var input = "and lorem and ipsum"; 

// remove ands 
var deandizedinput = input.replace(/\band\b/g, ' '); 

// replace all white spaces with a single space 
var normalizedinput = deandizedinput.replace(/\s+/g, ' '); 

// split the input and count words 
var wordcount = normalizedinput.trim().split(' ').length; 

violín here.

+0

esto funciona muy bien - Muchas gracias. Para mi comprensión, ¿puede explicar el \ b en la eliminación y la búsqueda? –

+1

\ b coincide con el límite de palabra. Aquí se garantiza que solo elimine una palabra independiente "y" y no una subcadena de las palabras que la contengan (como banda, paisaje, etc.). Ver también la respuesta de @Dima, que sugiere mirar la validación remota, que vale la pena considerar. –

1

En caso de que esté utilizando MVC3, puede usar la validación remota en el modelo (RemoteAttribute). O puede hacer ese tipo de validación a mano con la solicitud ajax.

Esto mantendrá su código de duplicación.

Cuestiones relacionadas