ご存じのとおり、HTMLコードでURLなどの長い英数字を記述すると、自動的に改行されずに、画面のレイアウトが崩れてしまうことがあります。
これに対応するには、適切な位置に改行(<br>タグ)、もしくは単語ブレーク(<wbr>タグ)を挿入する必要があります。単語ブレークの場合、HTMLページのテキストをコピーした場合に、実際の改行が入らないというメリットがあり、特にソース コードの場合に便利です。
(ちなみにIEでは、「word-break: break-all;」というスタイルを適用することで、すべての文字で単語ブレークが可能になります。)
このような改行や単語ブレークの挿入をプログラムで自動化する場合、「自動的に改行されない英数字かどうか」(つまり「HTMLコードで単語と見なされる英数字」。以降、単語化される英数字)を判別して単語の長さを測定する必要があります。
その際、実際にはどのような文字が、「単語化される英数字」に該当するのかが悩みでした。
そこで、それをFirefoxで調べてみました。調べた限りでは、「単語化される英数字」は以下のとおりで、ASCIIコードのすべて(=128種類のローマ字、数字、記号のうち、制御コードは除く)のようでした。
以下の【コード】の表記の意味は「16進数(=10進数)」です。
【コード】0x21(=33)~0x2f(=47)
【文字】!"#$%&'()*+,-./
【コード】0x30(=48)~0x39(=57)
【文字】0123456789
【コード】0x3a(=58)~0x40(=64)
【文字】:;<=>?@
【コード】0x41(=65)~0x5a(=90)
【文字】ABCDEFGHIJKLMNOPQRSTUVWXYZ
【コード】0x5b(=91)~0x60(=96)
【文字】[\]^_`
【コード】0x61(=97)~0x7a(=122)
【文字】abcdefghijklmnopqrstuvwxyz
【コード】0x7b(=123)~0x7e(=126)
【文字】{|}~
つまり、以下のようなコードで、各文字が「単語化される英数字」かどうかを判定できます(1文字ずつの判定)。なお、oneCharはChar型(char型)の変数。
【VBコード】
' ASCIIコードを取得Dim code As Integer = Asc(oneChar)
' 単語化される英数字を判定
If *1 Then
' oneCharは単語化される英数字です
End If
【C#コード】
// ASCIIコードを取得int code = (int)oneChar;
// 単語化される英数字を判定
if *2
{
// oneCharは単語化される英数字です
}