2010-06-14 35 views

Trả lời

8

[^\s;|\\*'"!,()<>] trận đấu bất kỳ ký tự ASCII khác so với các ký tự được liệt kê và bất kỳ ký tự không phải ASCII nào.Vì các chuỗi JavaScript là nhận thức Unicode, điều đó có nghĩa là mọi ký tự được biết đến với Unicode. sẽ viết lại lớp nhân vật để phù hợp với ký tự mà bạn làm muốn cho phép, như regex này từ Regular Expressions Cookbook làm:

/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g 
5

(trả lời câu hỏi của riêng tôi) Tôi đã làm một số đào ... tài liệu JSLint nói:

Không cho phép không an toàn. và [^ ...]. trong/RegExp/regexp: true nếu. và [^ ...] không được phép trong các ký tự RegExp. Không nên sử dụng các biểu mẫu này khi xác thực trong các ứng dụng bảo mật.

Những gì tôi đã làm là vô hiệu hóa các lỗi JSLint cho dòng vi phạm (như tôi đang phải đối phó với cần phải được an toàn từ có khả năng độc hại người dùng nhập vào:

/*jslint regexp: false*/ 
.... Javascript statement(s) .... 
/*jslint regexp: true*/ 
+1

Tôi thực sự đã thay đổi mã của tôi để sử dụng gợi ý của Alan trên, như regex đó là nghiêm ngặt . – Zhami

+1

Thực ra, bạn cần chuyển đổi các dòng. Đó là regexp: true rồi regexp: false –

0

Bạn nên sử dụng:

/*jslint regexp: true*/ 
linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g; 
/*jslint regexp: false*/ 
+0

Bạn có thể giải thích câu trả lời của mình không? Dòng nhận xét đó tắt/bật và lý do gì trong trường hợp này là cần thiết? – Marki555

+0

Để ngăn chặn lỗi lint được báo cáo – felipekm

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