2016-04-30 23 views
9

Tôi đang sử dụng đối sánh mẫu regex để xác thực biểu mẫu HTML5. Phiên bản mới nhất của Firefox cho tôi một lỗi. Tôi chỉ bắt đầu thấy điều này trong Firefox 46. Tôi không nghĩ rằng đây là một vấn đề trong các phiên bản Firefox trước đó.Lỗi Firefox: Không thể kiểm tra đầu vào vì mẫu không phải là regexp hợp lệ: thoát danh tính không hợp lệ trong biểu thức chính quy

Unable to check <input pattern='[\@\%]'> because the pattern is not a valid regexp: invalid identity escape in regular expression

gây ra bởi trường hợp thử nghiệm rất đơn giản này:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="UTF-8"> 
    </head> 
    <form> 
    <input pattern="[\@\%]"> 
    </form> 
</html> 

Tại sao thoát những nhân vật được coi là một lỗi? Tôi đã luôn luôn thoát khỏi mọi thứ trong các biểu thức thông thường của tôi mà không phải là một số hoặc một lá thư. Tôi chưa bao giờ có bất cứ điều gì phàn nàn về loại ký tự thoát này ngoại trừ phiên bản Firefox này.

Khi tôi học regex, tôi được thông báo rằng mọi thứ không phải là số hay chữ cái đều có ý nghĩa đặc biệt. Ngay cả khi nó không phải bây giờ, nó có thể trong một phiên bản tương lai, vì vậy nó là tốt hơn để thoát khỏi chúng. Điều này có đúng không?

Có danh sách các ký tự tôi không nên thoát cho Firefox không?

+0

_sidenote_: - bạn không cần phải thoát khỏi những ký tự trong lớp nhân vật như họ không có bất kỳ ý nghĩa đặc biệt – rock321987

Trả lời

4

Điều này là do sự thay đổi sau đây: Bug 1227906 - HTML pattern attribute should set u flag for regular expressions

Như ai đó đã nói, bạn không cần phải thoát khỏi những ký tự. Chỉ cần sử dụng:

<input pattern="[@%]"> 
+0

văn các [site tương thích doc] (https: //www.fxsitecompat. com/en-CA/docs/2016/input-pattern-now-sets-u-flag-for-regular-expressions /) cho việc này. –

+0

[Vấn đề github liên quan] (https://github.com/whatwg/html/issues/439) cũng đã được mở lại. – sideshowbarker

+0

Bất kỳ ý tưởng nào tại sao bạn không thể thoát khỏi các ký tự đó trong chế độ regex Unicode? –

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