Hướng dẫn how do you check if a string is html or not using javascript? - làm cách nào để kiểm tra xem một chuỗi có phải là html hay không bằng javascript?

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.59917 Huy hiệu vàng58 Huy hiệu bạc85 Huy hiệu Đồng17 gold badges58 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.5486 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

Phù bằng vàng 190K2525 gold badges232 silver badges253 bronze badges

10

Dưới đây là một lớp lót cẩu thả mà tôi sử dụng theo thời gian:

var isHTML = RegExp.prototype.test.bind[/[]+]>]/i];

Về cơ bản, nó sẽ trả về

//i.test[]
0 cho các chuỗi chứa
//i.test[]
7 sau đó là
//i.test[]
8 sau đó là
//i.test[]
9.
//i.test[]
8
followed by
//i.test[]
9.

Đến

//i.test[]
8, về cơ bản, tôi có nghĩa là bất cứ điều gì ngoại trừ một chuỗi trống.
//i.test[]
8
, I mean basically anything except an empty string.

Nó không tuyệt vời, nhưng nó là một lớp lót.

Cách sử dụng

isHTML['Testing'];               // false
isHTML['

Testing

']; // true isHTML['']; // true isHTML['My < weird > string']; // true [caution!!!] isHTML['']; // false

Như bạn có thể thấy nó không hoàn hảo, nhưng có thể làm công việc cho bạn trong một số trường hợp.

Đã trả lời ngày 21 tháng 4 năm 2016 lúc 14:50Apr 21, 2016 at 14:50

Johan Dettmarjohan DettmarJohan Dettmar

26.7K4 Huy hiệu vàng32 Huy hiệu bạc28 Huy hiệu đồng4 gold badges32 silver badges28 bronze badges

1

Một chút xác nhận với:

/|br|hr|input|!--|wbr][a-z]+.*?>|

Bài Viết Liên Quan

Chủ Đề