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( );
    }
}
?>