2015-04-08

URIと判別すべき文字列

手元でちょこちょこ作ってるServletで、入力として渡される文字列に対してリンクを生成してるのだけど、リンクを生成しても意味がない(URIではない)文字列かどうかを判別する処理を考える。
とは言っても、リンクとして生成すれば何でも相対パスとしては正しいリンクなので、それはそれとして捨てる感じで(URIエスケープされているかどうかという観点でやるのが一番良いのだろうけど)

定義を確認

というわけで、URIのRFCを参照して、URIスキームのABNFを確認。[1][2]
  • URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
  • scheme        = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
  • ALPHA          =  %x41-5A / %x61-7A   ; A-Z / a-z
  • DIGIT          =  %x30-39   ; 0-9

端的には、アルファベットから始まるアルファベットと数字と+と-と.から始まって:で終わる文字列で始まる文字列ということで。

[1] http://tools.ietf.org/html/std66#appendix-A
[2] http://tools.ietf.org/html/std68#appendix-B