読者です 読者をやめる 読者になる 読者になる

いっしきまさひこBLOG

Web制作関連、プログラミング関連、旅行記録などなど。

改行されない長い英数字の判定方法

ご存じのとおり、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は単語化される英数字です

}

*1:33 <= code) And (code <= 126

*2:33 <= code) && (code <= 126