2009年7月7日火曜日

PHPとJavaScriptでひらがなカナタカチェック!

まずは下ごしらえから

今回はUTF-8とUTF-16でのチェックです。ちなみにJavaScriptはUCSモデルで内部的に文字コードをUTF-16で扱います。PHP5はCSIモデル?なので、文字コードが混在しますので、各文字コード用には下記リンクを参照に作ってみて下さい。 PHP6からはUCSになります(UTF-16)。

今回は伸ばし棒(「ー」U+30FC)も入れます。この文字はKatakana Hiragana prolonged sound markという名でUnicodeに登録されてます。

PHP

クラス実装版。PHP5用でUTF-8の場合です。

class Valio{
 /**
  * UTF-8で全角カタカナと「ー」だけか調べます
  *
  * @param string $string
  * @return bool
  * @static
  * @access public
  */
 public static function isKatakanaOnly($string)
 {
  return preg_match('/^(\xe3(\x82[\xa1-\xbf]|\x83[\x80-\xb6]|\x83\xbc))+$/', $string) > 0 ? true : false;
 }
 
 /**
  * UTF-8で全角ひらがなと「ー」だけか調べます
  *
  * @param string $string
  * @return bool
  * @static
  * @access public
  */
 static public function isHiraganaOnly($string)
 {
  return preg_match('/^(\xe3(\x81[\x81-\xBF]|\x82[\x80-\x93]|\x83\xbc))+$/', $string) > 0 ? true : false; 
 }
}
Valio::isHiraganaOnly('どーぴん'); # => true

JavaScript

今回はカタカナは実装しなかったのでひらがなだけ。カタカナも同じように作れます。

/^([\u3040-\u309Fー]+)$/.test('チェックしたい文字列')

僕の場合、よくフォームはtable要素と組んで、jQuery UIを使って制御するので、こんな感じのチェック用関数を用意して、keyupにバインドさせてます。

function hiraganaOnly()
{
 var ele = $(this);
 var pEle = $('th,td',ele.parent().parent())
 if(/^([\u3040-\u309Fー]+)$/.test(ele.val())){
  clearUserErrorMessage(ele.attr('id'))
  pEle.removeClass('ui-state-error ui-corner-all');
 }else {
  addUserErrorMessage(ele.attr('id'),$('label[for="'+ ele.attr('id') +'"]').html().replace(/^\*/,'') + 'はひらがなと「ー」で入力して下さい');
  pEle.addClass('ui-state-error ui-corner-all');
 }
}

0 件のコメント: