isKanaBehavior
習作
<?php class isKanaBehavior extends ModelBehavior { function setup( &$model, $config = array( ) ) { } function isKana( &$model, $params ) { list( $field, $val ) = each( $params ); $enc = Configure::read( 'App.encoding' ); mb_internal_encoding( $enc ); mb_regex_encoding( $enc ); return mb_ereg( '^[ァ-ヶー]+$', $val ); } } ?>
test
<?php App::import( 'Behavior', 'isKana' ); class TestKatakanaModel extends CakeTestModel { var $name = 'TestKatakanaModel'; var $useTable = false; var $_schema = array( 'katakana' => array( 'type' => 'string', ), ); var $actsAs = array( 'isKana', ); } class isKanaTest extends CakeTestCase { function setUp( ) { $this->m = new Hoge( ); } function tearDown( ) { unset( $this->m ); } function testIsKanaStringArg( ) { $this->m->validate = array( 'katakana' => array( 'rule' => 'isKana', ), ); $this->_assert( ); } function testIsKanaArrayArg( ) { $this->m->validate = array( 'katakana' => array( 'rule' => array( 'isKana', ), ), ); $this->_assert( ); } function _assert( ) { $res = $this->_invalidFields( 'アイウエオ' ); $this->assertTrue( empty( $res ) ); $res = $this->_invalidFields( 'アイウエオー' ); $this->assertTrue( empty( $res ) ); $res = $this->_invalidFields( 'ヶキャンァ' ); $this->assertTrue( empty( $res ) ); $res = $this->_invalidFields( 'ーアイウエオ' ); $this->assertTrue( empty( $res ) ); $res = $this->_invalidFields( 'aaa' ); $this->assertFalse( empty( $res ) ); $res = $this->_invalidFields( 'あいうえお' ); $this->assertFalse( empty( $res ) ); $res = $this->_invalidFields( 'アaa' ); $this->assertFalse( empty( $res ) ); $res = $this->_invalidFields( 'アーーー.' ); $this->assertFalse( empty( $res ) ); } function _invalidFields( $val, $enc = '' ) { $TestKatakanaModel = array( 'katakana' => $val, ); $this->m->set( compact( 'TestKatakanaModel' ) ); return $this->m->invalidFields( ); } } ?>