質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

1891閲覧

HTMLバリデーションの開始タグ終了タグチェックを正規表現を使わずに実装したい

pan0008

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2020/07/15 19:46

編集2020/07/16 00:26

前提・実現したいこと

今Java8で入力値のテキストに対して、HTMLバリデーションを実装しています。HTMLタグが入力されている際の開始タグ終了タグチェックです。
たとえば<b>aiueoなら</b>がないのでエラー、aiueo</b>なら<b>がないのでエラー、<b>aiueo</b>ならエラーなしです。

終了タグが必要なタグは候補として出せているので、シンプルに
「開始タグ終了タグ」チェックのロジックを実装したいです。ただ正規表現は処理が重くなるので他の方法(例えばJavaのAPIのメソッドを使ったり)で実装したいです。
ただしAPI側の実装なのであくまでJava側での実装になります。

わかる方はいらっしゃいますでしょうか?アイデアやヒント、キッカケ、予想でも構いません。
よろしくお願いいたします。

背景

商品説明のテキストボックスにHTMLも入力できますが、その際のバリデーション機能をつけることを任されています。
ただし、実装する箇所はAPI側なので、Javaでの実装になります。
また正規表現ではじめ実装していましたが、責任者からパフォーマンスの問題から正規表現はやめてほしいと言われました。
チェックしたい内容は
①あらかじめ終了タグが必要な対象のタグはラインナップされており、そのタグの場合終了タグが必要(a,table,bなど)
②終了タグがあり、開始タグがない場合もエラー
③属性やコメントタグに終了タグの文字列が入っているケースも考慮する。チェックしないように。
④タグ内に空白がある場合もチェックする。< a>のように。

意図

とくに②〜④についてどうしたらできるかなと思いました。
あとはより良い実装方法はないかと思いました。

試したこと

こちらのページを参考にし、実装しています。
http://www5b.biglobe.ne.jp/~taka_2/jclass/Stack.html
ただ終了タグがあって、開始タグがないケースもチェックしたいし、コメントになっている箇所はチェック対象からは外したいので、そのケースをどう追加しようかなと思っています。

https://java-source.net/open-source/html-parsers
またこのページも勉強しています。使えるクラスはないかと。どのように使うのかと。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/07/15 22:17

やりたいことしか書かれてませんが、自身で試したこと調べたことはないのでしょうか 質問は編集できますので適宜追記してください
m.ts10806

2020/07/15 22:19

ただ、例示されている<table>aiueo</table> はHTML構文としてはNGです。 パターンケースを全て出さないとなんとも言えないのでは。 前提や背景、本来の目的も追記願います。
退会済みユーザー

退会済みユーザー

2020/07/15 23:06

> 正規表現は処理が重くなる 多分記載したパターンが悪い
pan0008

2020/07/16 00:27

修正しました
dodox86

2020/07/16 00:36

スタックを利用した方法は一番に思い付きましたが、既に以下のサイトを参考にされて実装されているのであれば、応用すれば開始タグが無いケースもコメント部分の除去もできるのではないですか。 http://www5b.biglobe.ne.jp/~taka_2/jclass/Stack.html 今現時点で要望を満たせていないとしてもパフォーマンスの点で良さげであるならば、有力候補と言って良いのではないかと思います。
dodox86

2020/07/16 00:37

「その他に有力な考え方、実装方法はありそうですか?」と言う問いなのであれば、それはそれで良いと思います。
guest

回答1

0

ベストアンサー

javaはよくわかりませんが正規表現の処理が重くて実装に向かない環境なら
他の処理(たとえばできるならdomとか?)はもっとだめだと思います。

投稿2020/07/16 00:22

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pan0008

2020/07/17 03:37

かしこまりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問