2013-08-23 44 views
8

Tôi có regex sau đó không cho phép một số ký tự đặc biệt:Regex không cho phép một số ký tự đặc biệt

if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){  
    alert("password not valid"); 
} 
else 
{ 
    alert("password valid"); 
} 

này đang làm việc. Regex này sẽ chấp nhận mật khẩu nếu nó không chứa bất kỳ ký tự đặc biệt nào trong ngoặc đơn (~,.<>;':"\/\[\]\|{}()-=_+).

Vấn đề của tôi ở đây là nó cũng không cho phép tôi nhập số điện thoại lạ.

Mọi thứ tôi đã bỏ lỡ ở đây? Cảm ơn trước!

Đây là một mẫu:

jsFiddle

+4

trong khi bạn có thể sử dụng câu trả lời của @ m.buettner để sửa lỗi regex của mình, bạn vẫn đang làm sai: sử dụng aproach whilelist, chỉ định ký tự * hợp lệ * thay thế! –

+0

@DarenThomas hoàn toàn đồng ý –

+0

Tôi cũng có điều kiện if để kiểm tra các ký tự hợp lệ chỉ nhưng tôi đã sử dụng nó ở phía máy chủ. Những gì tôi đang làm bây giờ là tạo ra một chức năng phía khách hàng sẽ kiểm tra nếu một số ký tự không được phép có mặt, thay đổi tín hiệu chỉ báo mật khẩu thành yếu. – Gerald

Trả lời

10

Bạn đã có một loạt nhân vật trong đó: )-= bao gồm tất cả các ký tự ASCII giữa )= (bao gồm cả số). Di chuyển - đến hết lớp hoặc thoát khỏi nó:

/[`~,.<>;':"\/\[\]\|{}()=_+-]/ 

Ngoài ra, bạn không cần phải thoát khỏi tất cả những nhân vật:

/[`~,.<>;':"/[\]|{}()=_+-]/ 

Lưu ý rằng trong trường hợp của bạn, nó có lẽ là đủ cho bạn, để sử dụng test thay vì match:

if (/[`~,.<>;':"/[\]|{}()=_+-]/.test(testString))){ 
    ... 

test trả về một boolean (đó là tất cả các bạn cần), trong khi match trả về một mảng với tất cả các nhóm chụp (mà bạn đang loại bỏ).

Lưu ý rằng, như Daren Thomas chỉ ra trong nhận xét, bạn nên quyết định ký tự nào bạn muốn cho phép. Bởi vì cách tiếp cận hiện tại không chăm sóc tất cả các loại ký tự Unicode lạ, trong khi phàn nàn về một số tiêu chuẩn khá giống như _. Để tạo danh sách cho phép, bạn có thể chỉ cần đảo ngược cả lớp nhân vật và điều kiện:

if (!/[^a-zA-Z0-9]/.test(testString)) { 
    ... 

Và bao gồm tất cả các ký tự bạn muốn cho phép.

+0

Cảm ơn bạn vì điều này! Cũng cho điều 'test'. – Gerald

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