2012-09-10 32 views
5

Tôi về cơ bản có xác nhận sau trên trang của tôi - quy tắc từ của nó trong đó mô tả trong một hộp văn bản không thể lớn hơn 3 từ không bao gồm từ 'và'. Tôi đã triển khai xác thực phía máy chủ sau trong C# đang hoạt động tốtSao chép C# Server Side Validation trong 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"); 
    } 
} 

Tuy nhiên, tôi gặp khó khăn khi làm việc tương tự trong Javascript. Tôi đã thử những điều sau đây nhưng nó không hoạt động cho đến nay vì vậy hy vọng cho một ai đó mà có một kiến ​​thức tốt hơn về Javascript có thể thấy lỗi. Lưu ý nếu là một phần của hàm xác thực lớn hơn đang kích hoạt trên trang - các cảnh báo chỉ ở đó để xem liệu nó có thành công không nếu nó không xóa phần còn lại của JS trên trang làm việc tốt.

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

và bên dưới là regexWordRule được xác định ở đầu tệp js.

var regexWordRule = /[\S]+/; 

Trả lời

2

Bạn có thể tìm thấy một giải pháp tốt hơn, nhưng cách tiếp cận này lóe lên trong óc tôi, vì vậy tôi đăng nó:

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

công trình này tuyệt vời - Rất cám ơn. Đối với sự hiểu biết của tôi, bạn có thể giải thích \ b trong việc loại bỏ và tìm kiếm? –

+1

\ b khớp với ranh giới từ. Ở đây nó đảm bảo, rằng bạn chỉ xóa bất kỳ từ độc lập 'và' và không phải là chuỗi con từ các từ chứa từ đó (như ban nhạc, phong cảnh, v.v.). Xem thêm câu trả lời của @ Dima, gợi ý xem xét xác thực từ xa, điều đáng xem xét. –

1

Trong trường hợp bạn đang sử dụng MVC3, bạn có thể sử dụng Xác thực từ xa trên mô hình (RemoteAttribute). Hoặc bạn có thể thực hiện loại thủ công hợp lệ như vậy với yêu cầu ajax.

Điều này sẽ giữ cho mã của bạn không bị trùng lặp.