2012-10-14 28 views
5

Sau đây kiểm tra mã mục được gửi qua đầu vào gồm 35 ký tự bao gồm chữ cái A-F và số 0-9, cũng như ba dấu gạch ngang ("-"). Một ví dụ về một mã hàng có giá trị sẽ là: 16FA860F-E86A457B-A28A238B-2ACA6E3DCần phải vượt qua một điều kiện Nếu chiều dài là Null

//Checks the item code to see if it meets requirements 
if($("#input").val().length > 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().length < 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too short. Be sure to include dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/([^A-Fa-f0-9-]+)/gm)) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> contains invalid characters.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else { 
//Rest of my code 
} 

Các công trình sau đây tốt, ngoại trừ nếu một mã hàng là 35 ký tự, nhưng không chứa dấu gạch ngang. Nếu nó chứa 1 hoặc 2 dấu gạch ngang, thì mã này sẽ bắt được, nhưng nếu nó chứa 0 thì nó sẽ bị treo và không làm gì cả. Tôi đã thử mọi thứ, nhưng dường như không thể tìm ra giải pháp có thể là gì. Kể từ khi chiều dài là null, nó chỉ treo. Một phần mà cần được tinh chỉnh bằng cách nào đó là:

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

Tôi chắc chắn giải pháp là một cách dễ dàng, nhưng tôi stumped.

EDIT: Đây là cách tôi có mọi thứ được đặt ra cho hầu hết các phần, ngoại trừ CSS. http://jsfiddle.net/86KcG/1/

+4

Có vẻ như bạn đang quá phức tạp điều này. Định dạng có luôn giống nhau không? Đó là, '-' luôn ở cùng vị trí? Một biểu thức chính quy sẽ thực hiện công việc ... –

+0

điều kiện nào sẽ xảy ra nếu độ dài là 35 ?? – charlietfl

+0

@Michael Vâng, nhưng tôi không quá lo lắng về việc kiểm tra điều đó ngay bây giờ, mặc dù nó sẽ rất tuyệt. Tôi tập trung vào việc đảm bảo luôn có ba dấu gạch ngang trong mã và nếu không có, hãy cung cấp thông báo lỗi.Nó hoạt động nếu chỉ có 1 hoặc 2, nhưng nếu không có, thì nó không làm gì cả. –

Trả lời

1

Bạn có thể sửa mã của bạn bằng cách sử dụng một regex bằng cách nào đó như thế này trên

/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/ 

đâu^và $ phù hợp với đầu vào bắt đầu và kết thúc, và nhóm các nhân vật AF và 0-9 với ràng buộc là một dấu gạch ngang được phân tách bằng ít nhất một ký tự của nhóm AF hoặc 0-9.

Kết hợp séc này với kiểm tra độ dài 35 ký tự làm cho mã của bạn hoạt động.

//Checks the item code to see if it meets requirements 
if($("#input").val().length != 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long/short.<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
else if(!(/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/.test($("#input").val()))) { 
    $("#errorLogContent").prepend("Insert some dashes and make sure the required pattern...<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
+0

Đây là những gì hiệu quả nhất đối với tôi. nnnnnn của giải pháp giữ cho tôi một lỗi, có lẽ lỗi của tôi mặc dù. Mặc dù tôi đã kết thúc bằng cách sử dụng regex của nnnnnn. –

0

.length sẽ không bao giờ là null. Sự trở lại từ match() sẽ là null nếu không khớp, trong trường hợp này bạn sẽ gặp lỗi nếu bạn cố gắng kiểm tra thuộc tính lengthnull không có thuộc tính, vì vậy bạn cần kiểm tra (nhưng length chính nó sẽ luôn là một số nguyên từ 0 lên hoặc undefined).

Vì vậy, bạn có thể nói:

else { 
    var matches = $("#input").val().match(/[-]/g); // note: match() only takes one parameter 
    if (matches != null && matches.length > 3) { 
     $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

     $("#ise").each(function(){ 
      this.reset(); 
     }); 
    } 
} 

Đối với ít hơn 3 thử nghiệm của bạn, bạn muốn nói:

if (matches === null || matches.length < 3) 

... để phục vụ cho khi không có trận đấu (trở lại của null) hoặc một số kết quả phù hợp nhưng ít hơn 3.

Nếu giá trị chính xác luôn theo mẫu 16FA860F-E86A457B-A28A238B-2ACA6E3D, tức là các nhóm gồm 8 chữ cái hoặc số được phân cách bằng dấu gạch ngang, thì bạn có thể làm này:

if (!/^[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}$/i.test($("#input").val()) { 
    // invalid, do something... 
} 

Các regex .test() method trả true hoặc false tuỳ thuộc vào việc các chuỗi cung cấp phù hợp.

Các vấn đề liên quan