2012-09-10 12 views
5

Fondamentalmente ho la seguente validazione sulla mia pagina - è una regola di parola in quanto una descrizione in una casella di testo non può essere maggiore di 3 parole esclusa la parola 'e'. Ho implementato il seguente validazione lato server in C# che sta lavorando beneReplica convalida lato server C# in 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"); 
    } 
} 

Tuttavia sto avendo difficoltà a ottenere lo stesso lavoro in Javascript. Ho provato quanto segue ma non funziona fino ad ora, quindi spero che qualcuno con una migliore conoscenza di Javascript possa vedere l'errore. Nota che if fa parte di una funzione di convalida più grande che si attiva sulla pagina - gli avvisi erano lì solo per vedere se è entrato in questo se (cosa che non lo è) - quando questo è rimosso il resto del JS sulla pagina è funziona bene.

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

e il seguente è il mio regexWordRule definito nella parte superiore del file js.

var regexWordRule = /[\S]+/; 

risposta

2

Si potrebbe trovare una soluzione migliore, ma questo approccio è venuto in mente, così mi distacco che:

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; 

Fiddle here.

+0

questo funziona benissimo - Molte grazie. Per mia comprensione puoi spiegare il \ b nella rimozione e ricerca? –

+1

\ b corrisponde al limite della parola. Qui garantisce che si rimuova solo una parola autonoma "e" e non una sottostringa dalle parole che la contengono (come la banda, il paesaggio, ecc.). Vedi anche la risposta di @ Dima, che suggerisce di guardare alla validazione remota, che vale la pena considerare. –

1

Se si utilizza MVC3, è possibile utilizzare la convalida remota sul modello (RemoteAttribute). Oppure puoi effettuare manualmente questo tipo di convalida con una richiesta jax.

Ciò manterrà il vostro codice dalla duplicazione.

Problemi correlati