LoginSignup
0
1

More than 3 years have passed since last update.

[JavaScript]HTMLタグは限定タグに変換、HTML特殊文字→文字実体参照 正規表現

Posted at

はじめに

タイトルが適当でごめんなさい:bow_tone1:
『この正規表現よりこっちの方がいいよ!』などあれば教えて頂けると嬉しいです。
『この正規表現どこで使うの?』ですが、どうしても可変の値をHTMLで表示したい場合のXSS対策に使うと思ってます。
どうやって書こうって悩んでしまったので今回qiitaに載せました。:bow_tone1:

用語説明

自分のサイトなのに色々な用語をたくさん使ってしまったため、ここで用語の説明を簡単にさせて頂きたいと思います:shamrock:『用語全然理解できなくないよ!』と言う方はここは読み飛ばしてください!

HTML特殊文字
HTMLでは、特別な文字として取り扱われる文字。
<strong> をHTMLに記述するとHTMLタグと認識されるとかそういったもの。
参考:http://www.shurey.com/js/labo/character.html

文字実体参照
特殊文字を普通の文字として使いたいときがある。そう言う時はあらかじめHTMLでこのように書くとその文字を表示できるよなるものがあります。参考は上のサイトを。
<を書きたければ&lt;と書けみたいな

可変の値
固定の逆。その値が変わるだろう値。
例えば、
ユーザーの入力。
例えば、
API通信で取得する値

XSS
本来表示してあるHTMLの文章に意図したjsやHTMLなどを入れられそうだ!入れてしまえ!っといって入れられてしまうもの。

正規表現(code全体)

var text = '<script>!!!</script>&<strong>aaa</strong>&<script>sssss</script>&&""""&&&&&&<b>aa</b><psss>dsds</p><script>!!!</script>';
var regex1 = /(&){1}/gi;
var chenge1 = text.replace(regex1, '&amp;')
var regex2 = /("){1}/gi;
var chenge2 = chenge1.replace(regex2, '&quot;')
var regex3 = /<[^\/]{1}.*?>/gi;
var chenge3 = chenge2.replace(regex3, '<strong>')
var regex4 = /<(\/){1}.*?>/gi;
var chenge4 = chenge3.replace(regex4, '</strong>')
console.log(chenge4);

出力↓

<strong>!!!</strong>&amp;<strong>aaa</strong>&amp;<strong>sssss</strong>&amp;&amp;&quot;&quot;&quot;&quot;&amp;&amp;&amp;&amp;&amp;&amp;<strong>aa</strong><strong>dsds</strong><strong>!!!</strong>

これをHTMLで表示↓
スクリーンショット 2019-11-02 10.14.22.png

※使用サイト:https://codepen.io/pen/

正規表現の説明

var regex1 = /(&){1}/gi; //『&』1文字を検索
var chenge1 = text.replace(regex1, '&amp;') //『&』1文字を『&amp;』に変換
var regex2 = /("){1}/gi; //『"』1文字を検索
var chenge2 = chenge1.replace(regex2, '&quot;')//『"』1文字を『&quot;』に変換
var regex3 = /<[^\/]{1}.*?>/gi; //『/』で始めらない文字1文字から始めり、後はなんでも可能 <a>や<bb>など当てはまる
var chenge3 = chenge2.replace(regex3, '<strong>')//それらを<strong>に変換
var regex4 = /<(\/){1}.*?>/gi; //『/』で始まる文字1文字から始めり、後はなんでも可能 </a>や</bb>など当てはまる
var chenge4 = chenge3.replace(regex4, '</strong>')//それらを</strong>に変換

ちなみに、

正規表現 意味
. 改行文字以外ならなんでもマッチ!
文字 + * 文字がが表示されないか文字が連続で表示されるか
文字 + ? 文字が表示されないパターンか1回のみの表示となる

参考
JavaScript 正規表現まとめ
正規表現パターンの記述

さいごに

以上!終わりです!(。・ω・。)
今お腹空いてます!:flushed:

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1