2013-07-18 25 views
22

Tôi không biết vì regex của tôi là không đúng:Phạm vi ra khỏi trật tự trong lớp nhân vật trong javascript

var domain = "google\.com\.br"; 
var reEmail = new RegExp("^([A-Za-z0-9_\-\.])+\@" + domain + "$"); 

tôi cần điều này để xác nhận một email, ví dụ: reEmail.test("[email protected]");

tôi nhận được lỗi này:

Phạm vi ra khỏi trật tự trong lớp nhân vật

+0

Dùng regex đen: '/^([. A-Za-z0-9 _ \ -]) + @ /' !!! – Bergi

Trả lời

43

Bởi vì bạn tạo RegExp sử dụng một chuỗi các _\-\. trở thành _-. và đó là phạm vi không hợp lệ. (Đó là một loạt _-. và đó không phải là chính xác)

Bạn cần phải thoát đôi nó:

new RegExp("^([A-Za-z0-9_\\-\\.])[email protected]" + domain + "$"); 

Bằng cách đó các \\ trở thành một \ trong String và sau đó được sử dụng để thoát khỏi - trong RegExp.

EDIT:

Nếu bạn tạo RegExp bởi Chuỗi nó luôn luôn hữu ích để đăng nhập kết quả để bạn xem nếu bạn đã làm tất cả mọi thứ phải:

ví dụ phía bạn của RegExp

console.log("^([A-Za-z0-9_\-\.])+\@"); 

kết quả trong:

^([A-Za-z0-9_-.])[email protected] 
+6

Trên một lưu ý phụ, cách nhanh chóng để xử lý này là, nếu bạn cần cho phép ký tự '-' là ký tự hợp lệ trong nhóm ký tự, hãy đặt ký tự đó làm ký tự đầu tiên hoặc cuối cùng trong nhóm (ví dụ:' [ -a-zA-Z0-9 _] 'hoặc' [a-zA-Z0-9 _-] '). Regex đủ thông minh để biết rằng bạn không chỉ định một phạm vi với ký tự đó, nếu nó nằm trong các vị trí đó (mà không cần phải thoát khỏi nó bằng dấu gạch chéo). – talemyn

+0

@talemyn Chắc chắn đó là sự thật. Cá nhân tôi thích để thoát khỏi nó (và cũng đặt điều này vào hướng dẫn mã hóa của chúng tôi) bởi vì nó có một ý nghĩa đặc biệt. –

+0

Câu trả lời này phải được chấp nhận. bổ sung tốt đẹp bởi @talemyn cũng – adi

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