2012-09-10 13 views
5

Zasadniczo mam następującą walidację na mojej stronie - jest to reguła słowa, w której opis w polu tekstowym nie może być większy niż 3 wyrazy z wyłączeniem słowa "i". I wprowadziły następujące poprawności po stronie serwera w C#, który działa poprawnieReplikacja C# Server Side Validation w 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"); 
    } 
} 

Jednak mam trudności z taką samą pracę w JavaScript. Próbowałem, ale nie działa tak daleko, więc nadzieję, że ktoś, kto ma lepszą znajomość JavaScript może zobaczyć błąd. Zauważ, że jeśli jest częścią większej funkcji sprawdzania poprawności, która uruchamia się na stronie - alerty były właśnie po to, aby zobaczyć, czy się do tego dostarczy, jeśli (co robi) - gdy ten blok zostanie usunięty, reszta JS na stronie jest Dobrze pracować.

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

Poniżej znajduje się moja reguła regexWordRule zdefiniowana na samym szczycie pliku js.

var regexWordRule = /[\S]+/; 

Odpowiedz

2

Można znaleźć lepsze rozwiązanie, ale podejście to przyszło mi do głowy, więc jestem delegowania go:

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

to działa świetnie - Wielkie dzięki. Dla mojego zrozumienia możesz wyjaśnić \ b w usunięciu i wyszukiwaniu? –

+1

\ b dopasowuje granicę słowa. Zapewnia to, że usuwasz tylko oddzielne słowo "i", a nie podciąg z zawartych w nim słów (jak zespół, pejzaż itp.). Zobacz także odpowiedź @ Dimy, która sugeruje spojrzenie na zdalną walidację, która jest warta rozważenia. –

1

Jeśli używasz MVC3, możesz użyć Zdalnej walidacji w modelu (RemoteAttribute). Lub możesz dokonać takiego sprawdzania poprawności manualy z prośbą ajax.

Pozwoli to uniknąć duplikowania kodu.