136
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi có một chuỗi nhất định mà tôi muốn kiểm tra xem đó có phải là HTML hay không. Tôi đang sử dụng Regex cho cùng nhưng không nhận được kết quả thích hợp.
Tôi đã xác nhận regex của tôi và nó hoạt động tốt ở đây.
var htmlRegex = new RegExp["]*>[.*?]"];
return htmlRegex.test[testString];
Đây là fiddle nhưng regex không chạy trong đó. //jsfiddle.net/wfwtc/
Trên máy của tôi, mã chạy tốt nhưng tôi hiểu sai thay vì đúng như kết quả. Thiếu gì ở đây?
hỏi ngày 17 tháng 3 năm 2013 lúc 8:23Mar 17, 2013 at 8:23
user1240679user1240679user1240679
6.55917 Huy hiệu vàng57 Huy hiệu bạc85 Huy hiệu Đồng17 gold badges57 silver badges85 bronze badges
9
Một regex tốt hơn để sử dụng để kiểm tra xem một chuỗi là html là:
/^/
Ví dụ:
/^/.test[''] // true
/^/.test['foo bar baz'] //true
/^/.test['fizz buzz
'] //true
Trên thực tế, nó rất tốt, nó sẽ trả lại
//i.test[]
0 cho mỗi chuỗi được truyền cho nó, đó là do mỗi chuỗi là HTML. Nghiêm túc mà nói, ngay cả khi nó được định dạng kém hoặc không hợp lệ, nó vẫn là HTML.every string is HTML. Seriously, even if it's poorly formatted or invalid, it's still HTML.Nếu những gì bạn đang tìm kiếm là sự hiện diện của các phần tử HTML, thay vì chỉ đơn giản là bất kỳ nội dung văn bản nào, bạn có thể sử dụng một cái gì đó dọc theo các dòng của:
//i.test[]
Nó sẽ không giúp bạn phân tích HTML theo bất kỳ cách nào, nhưng nó chắc chắn sẽ gắn cờ chuỗi là chứa các phần tử HTML.
Derpynerd
4.5386 Huy hiệu vàng37 Huy hiệu bạc88 Huy hiệu Đồng6 gold badges37 silver badges88 bronze badges
Đã trả lời ngày 17 tháng 3 năm 2013 lúc 8:43Mar 17, 2013 at 8:43
19
Phương pháp số 1. Dưới đây là chức năng đơn giản để kiểm tra nếu chuỗi chứa dữ liệu HTML:. Here is the simple function to test if the string contains HTML data:
function isHTML[str] {
var a = document.createElement['div'];
a.innerHTML = str;
for [var c = a.childNodes, i = c.length; i--; ] {
if [c[i].nodeType == 1] return true;
}
return false;
}
Ý tưởng là cho phép trình phân tích cú pháp DOM của trình duyệt quyết định xem chuỗi được cung cấp có trông giống như HTML hay không. Như bạn có thể thấy nó chỉ cần kiểm tra
//i.test[]
1 [//i.test[]
2 của 1].Tôi đã thực hiện một vài bài kiểm tra và có vẻ như nó hoạt động:
isHTML['this is a string'] // true
isHTML['this is a string'] // false
isHTML['this is a string'] // true
Giải pháp này sẽ phát hiện đúng chuỗi HTML, tuy nhiên nó có tác dụng phụ mà img/vide/vv. Tags sẽ bắt đầu tải xuống tài nguyên sau khi được phân tích cú pháp trong bên trong.
Phương pháp #2. Một phương pháp khác sử dụng Domparser và không có tác dụng phụ tài nguyên tải:. Another method uses DOMParser and doesn't have loading resources side effects:
function isHTML[str] {
var doc = new DOMParser[].parseFromString[str, "text/html"];
return Array.from[doc.body.childNodes].some[node => node.nodeType === 1];
}
Ghi chú: 1.
//i.test[]
3 là phương pháp ES2015, có thể được thay thế bằng ________ 34.2. Hàm mũi tên trong cuộc gọi //i.test[]
5 có thể được thay thế bằng hàm ẩn danh thông thường.1.
//i.test[]
3 is ES2015 method, can be replaced with //i.test[]
4.2. Arrow function in
//i.test[]
5 call can be replaced with usual anonymous function.Đã trả lời ngày 17 tháng 3 năm 2013 lúc 8:40Mar 17, 2013 at 8:40
DFSQDFSQdfsq
189K25 Huy hiệu vàng232 Huy hiệu bạc252 Huy hiệu Đồng25 gold badges232 silver badges252 bronze badges
10
Một chút xác nhận với:
/|br|hr|input|!--|wbr][a-z]+.*?>|]/i]; It will basically return true for strings containing a < followed by ANYTHING followed by > .