From 843d8bbcfa80220d9da813baabc2aa19ee33e15d Mon Sep 17 00:00:00 2001 From: hiromi2424 Date: Wed, 17 Nov 2010 11:33:29 +0900 Subject: [PATCH 1/7] fixed: when comparing field is not set, it causes undefinded index error(AddValidationBehavior#compare2fields()) --- models/behaviors/add_validation_rule.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/models/behaviors/add_validation_rule.php b/models/behaviors/add_validation_rule.php index a0eb01a..c3ab026 100644 --- a/models/behaviors/add_validation_rule.php +++ b/models/behaviors/add_validation_rule.php @@ -151,14 +151,15 @@ function betweenJP(&$model, $wordvalue, $low, $high) { * @param boolean $auth set true, $compare_filed is encrypted with Security::hash * @return boolean */ - function compare2fields( &$model, $wordvalue , $compare_filed , $auth = false ){ + function compare2fields( &$model, $wordvalue , $compare_field , $auth = false ){ - $fieldname = key($wordvalue); + $field = current($wordvalue); + $compare = isset($model->data[$model->alias][$compare_field]) ? $model->data[$model->alias][$compare_field] : null; if( $auth === true ){ App::import('Component','Auth'); - return ( $model->data[$model->alias][$fieldname] === AuthComponent::password($model->data[$model->alias][ $compare_filed ]) ); - }else{ - return ( $model->data[$model->alias][$fieldname] === $model->data[$model->alias][ $compare_filed ] ); + return $field === AuthComponent::password($compare); + } else { + return $field === $compare; } } From db0f5246e15dfb06012e11162f5f03997f6dc889 Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Thu, 9 Dec 2010 20:42:22 +0900 Subject: [PATCH 2/7] add test for compare field validation without index of array --- .../behaviors/add_validation_rule.test.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/cases/models/behaviors/add_validation_rule.test.php b/tests/cases/models/behaviors/add_validation_rule.test.php index 6cd11d6..e74f111 100644 --- a/tests/cases/models/behaviors/add_validation_rule.test.php +++ b/tests/cases/models/behaviors/add_validation_rule.test.php @@ -418,6 +418,25 @@ function _failSuccessTest($setFailData = array(),$setSuccessData = array(),$fiel } + + //比較対象のフィールドが存在しない場合でもエラーが出ないか確認テスト + function testValidataionCompare2fieldWithEmptyField(){ + + $data = array( + 'ValidationRule' => array( + 'valuediff' => 'あいうえお', + ), + ); + + $this->assertTrue( $this->ValidationRule->create( $data ) ); + $this->assertFalse( $this->ValidationRule->validates() ); + + $this->assertTrue( array_key_exists("valuediff" , $this->ValidationRule->validationErrors ) ); + + } + + + } ?> From 0ff6ae26a5be4425142c31f84c0dc58ff294df73 Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Thu, 30 Dec 2010 05:20:24 +0900 Subject: [PATCH 3/7] add datetime validation rule --- models/behaviors/add_validation_rule.php | 33 +++++++++++++++++++ .../behaviors/add_validation_rule.test.php | 26 ++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/models/behaviors/add_validation_rule.php b/models/behaviors/add_validation_rule.php index c3ab026..6847962 100644 --- a/models/behaviors/add_validation_rule.php +++ b/models/behaviors/add_validation_rule.php @@ -283,6 +283,39 @@ function password_valid( &$model, $wordvalue , $compare_filed , $min=5, $max=15 } + /** + * Datetime validation, determines if the string passed is a valid datetime. + * Using self date and time validation methods. + * + * @param string $check a valid datetime string + * @param mixed $format Use a string or an array of the keys below. Arrays should be passed as array('dmy', 'mdy', etc) + * @param string $regex If a custom regular expression is used this is the only validation that will occur. + * @return boolean Success + * @access public + */ + function datetime(&$model, $wordvalue, $format = 'ymd', $regex = null) { + $_this =& Validation::getInstance(); + $_this->__reset(); + + $value = array_shift($wordvalue); + + $pattern = '%^(.+) (\d+:\d+[APap][Mm])$|^(.+) (\d+:\d+)$%'; + preg_match($pattern, $value, $match); + if(!empty($match[1]) && !empty($match[2])) { + $date = $match[1]; + $time = $match[2]; + } else if(!empty($match[3]) && !empty($match[4])) { + $date = $match[3]; + $time = $match[4]; + } + + if(empty($date) || empty($time)){ + return false; + } + + return $_this->date($date, $format, $regex) && $_this->time($time); + } + } ?> diff --git a/tests/cases/models/behaviors/add_validation_rule.test.php b/tests/cases/models/behaviors/add_validation_rule.test.php index e74f111..f41cbd4 100644 --- a/tests/cases/models/behaviors/add_validation_rule.test.php +++ b/tests/cases/models/behaviors/add_validation_rule.test.php @@ -108,10 +108,16 @@ class ValidationRule extends AddValidationRuleTestModel ), ), 'password_valid' => array( - "rule11" => array('rule' => array('password_valid','password_conf', 5, 10), + "rule12" => array('rule' => array('password_valid','password_conf', 5, 10), 'message' => '正しいパスワードを入力して下さい' ), ), + 'datetime_valid' => array( + "rule13" => array('rule' => array('datetime', 'ymd', null), + 'message' => '正しい日付を入力して下さい' + ), + ), + @@ -436,6 +442,24 @@ function testValidataionCompare2fieldWithEmptyField(){ } + /** + * testDatetimeYyyymmdd method + * + * @access public + * @return void + */ + function testDatetimeYyyymmdd() { + + $setSuccessData = array('2006-12-27 12:22', '2006.12.27 12:22AM', '2006/12/27 12:22PM', '2006 12 27 12:22' ); + $setFailData = array('2006-11-31 12:22', '2006.11.31 12:22', '2006/11/31 12:22', '2006 11 31 12:22', ''); + + $field = 'datetime_valid'; + + $this->_failSuccessTest($setFailData, $setSuccessData, $field); + + } + + } From 9a1519eed484b5b3e473edcb87faf24d5c155b36 Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Thu, 30 Dec 2010 05:22:10 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=82=92=E6=B6=88?= =?UTF-8?q?=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/cases/models/behaviors/add_validation_rule.test.php | 4 ---- tests/cases/views/helpers/formhidden.test.php | 6 +----- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/tests/cases/models/behaviors/add_validation_rule.test.php b/tests/cases/models/behaviors/add_validation_rule.test.php index f41cbd4..d91d7c7 100644 --- a/tests/cases/models/behaviors/add_validation_rule.test.php +++ b/tests/cases/models/behaviors/add_validation_rule.test.php @@ -139,20 +139,16 @@ class AddValidationRuleTestCase extends CakeTestCase function startCase() { - echo '

Starting Test Case

'; $this->ValidationRule =& ClassRegistry::init('ValidationRule'); } function endCase() { - echo '

Ending Test Case

'; } function startTest($method) { - echo '

Starting method '.$method.'

'; } function endTest($method) { - echo '
'; } diff --git a/tests/cases/views/helpers/formhidden.test.php b/tests/cases/views/helpers/formhidden.test.php index a298489..8ca6bbb 100644 --- a/tests/cases/views/helpers/formhidden.test.php +++ b/tests/cases/views/helpers/formhidden.test.php @@ -42,20 +42,16 @@ function tearDown() { } function startCase() { - echo '

Starting Test Case

'; } function endCase() { - echo '

Ending Test Case

'; } function startTest($method) { - echo '

Starting method '.$method.'

'; } function endTest($method) { - echo '
'; } @@ -126,4 +122,4 @@ function test_basic_hidden_null(){ } -?> \ No newline at end of file +?> From bbc99f5887e33da25be5f4bb4a498ce7413d5be0 Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Thu, 30 Dec 2010 05:24:16 +0900 Subject: [PATCH 5/7] =?UTF-8?q?=E5=86=85=E9=83=A8=E7=94=A8=E3=81=AE?= =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=81=AE=E5=A0=B4=E6=89=80?= =?UTF-8?q?=E3=82=92=E7=A7=BB=E5=8B=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../behaviors/add_validation_rule.test.php | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/tests/cases/models/behaviors/add_validation_rule.test.php b/tests/cases/models/behaviors/add_validation_rule.test.php index d91d7c7..1bdba92 100644 --- a/tests/cases/models/behaviors/add_validation_rule.test.php +++ b/tests/cases/models/behaviors/add_validation_rule.test.php @@ -151,6 +151,35 @@ function startTest($method) { function endTest($method) { } + /** + * 複数のテストをまとめて実行するメソッド + * 失敗ケースの値と、成功ケースの値をそれぞれ配列でセットする + */ + function _failSuccessTest($setFailData = array(),$setSuccessData = array(),$field ) { + + //失敗パターン + $data = array(); + foreach($setFailData as $key => $value){ + $data['ValidationRule'][$field] = $value; + $this->assertTrue( $this->ValidationRule->create( $data ) ); + $this->assertFalse( $this->ValidationRule->validates() ); + $this->assertTrue( array_key_exists($field , $this->ValidationRule->validationErrors ) ); + } + + //成功パターン + $data = array(); + foreach($setSuccessData as $key => $value){ + $data['ValidationRule'][$field] = $value; + $this->assertTrue( $this->ValidationRule->create( $data ) ); + $this->assertTrue( $this->ValidationRule->validates() ); + $this->assertFalse( array_key_exists($field , $this->ValidationRule->validationErrors ) ); + } + + + } + + + //全てバリデーションに引っかかるテスト function testValidataionAllFail(){ @@ -397,30 +426,6 @@ function testValidataionPasswordValid(){ } - function _failSuccessTest($setFailData = array(),$setSuccessData = array(),$field ) { - - //失敗パターン - $data = array(); - foreach($setFailData as $key => $value){ - $data['ValidationRule'][$field] = $value; - $this->assertTrue( $this->ValidationRule->create( $data ) ); - $this->assertFalse( $this->ValidationRule->validates() ); - $this->assertTrue( array_key_exists($field , $this->ValidationRule->validationErrors ) ); - } - - //成功パターン - $data = array(); - foreach($setSuccessData as $key => $value){ - $data['ValidationRule'][$field] = $value; - $this->assertTrue( $this->ValidationRule->create( $data ) ); - $this->assertTrue( $this->ValidationRule->validates() ); - $this->assertFalse( array_key_exists($field , $this->ValidationRule->validationErrors ) ); - } - - - } - - //比較対象のフィールドが存在しない場合でもエラーが出ないか確認テスト function testValidataionCompare2fieldWithEmptyField(){ From e05c319118ad2d7f4be8c51a253943871e00e13e Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Fri, 17 Dec 2010 19:06:00 +0900 Subject: [PATCH 6/7] change method name following coding rule --- models/behaviors/add_validation_rule.php | 110 ++++++++++++++---- .../behaviors/add_validation_rule.test.php | 86 +++++++------- 2 files changed, 132 insertions(+), 64 deletions(-) diff --git a/models/behaviors/add_validation_rule.php b/models/behaviors/add_validation_rule.php index 6847962..c9ec680 100644 --- a/models/behaviors/add_validation_rule.php +++ b/models/behaviors/add_validation_rule.php @@ -41,21 +41,24 @@ * "rule4" => array('rule' => array('compare2fields', 'test_conf'), * 'message' => '値が違います' * ), - * "rule5" => array('rule' => array('space_only'), + * "rule5" => array('rule' => array('spaceOnly'), * 'message' => 'スペース以外も入力してください' * ), - * "rule6" => array('rule' => array('katakana_only'), + * "rule6" => array('rule' => array('katakanaOnly'), * 'message' => 'カタカナのみ入力してください' * ), * "rule7" => array('rule' => array('betweenJP', 5, 10), * 'message' => '5文字以上、10文字以内です' * ), - * "rule8" => array('rule' => array('hiragana_only'), + * "rule8" => array('rule' => array('hiraganaOnly'), * 'message' => 'ひらがなのみ入力してください' * ), - * "rule9" => array('rule' => array('zenkaku_only'), + * "rule9" => array('rule' => array('zenkakuOnly'), * 'message' => '全角文字のみ入力してください' * ), + * "rule10" => array('rule' => array('datetime'), + * 'message' => '正しい日時を入力してください' + * ), * ), * ); * @@ -172,14 +175,19 @@ function compare2fields( &$model, $wordvalue , $compare_field , $auth = false ){ * @param array $wordvalue * @return boolean */ - function hiragana_only( &$model, $wordvalue){ - + function hiraganaOnly( &$model, $wordvalue){ $value = array_shift($wordvalue); - return preg_match("/^[ぁ-んー]*$/u", $value); - } + /** + * 全角ひらがな以外が含まれていればエラーとするバリデーションチェック + * Japanese HIRAGANA Validation + * (old name, keep this for backward compatibility) + */ + function hiragana_only( &$model, $wordvalue){ + return $this->hiraganaOnly($model, $wordvalue); + } /** * 全角カタカナ以外が含まれていればエラーとするバリデーションチェック @@ -189,14 +197,21 @@ function hiragana_only( &$model, $wordvalue){ * @param array $wordvalue * @return boolean */ - function katakana_only( &$model, $wordvalue){ - + function katakanaOnly( &$model, $wordvalue){ $value = array_shift($wordvalue); - return preg_match("/^[ァ-ヶー゛゜]*$/u", $value); } + /** + * 全角カタカナ以外が含まれていればエラーとするバリデーションチェック + * Japanese KATAKANA Validation + * (old name, keep this for backward compatibility) + */ + function katakana_only( &$model, $wordvalue){ + return $this->katakanaOnly($model, $wordvalue); + } + /** * マルチバイト文字以外が含まれていればエラーとするバリデーションチェック @@ -206,11 +221,20 @@ function katakana_only( &$model, $wordvalue){ * @param array $wordvalue * @return boolean */ - function zenkaku_only( &$model, $wordvalue){ + function zenkakuOnly( &$model, $wordvalue){ $value = array_shift($wordvalue); return !preg_match("/(?:\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F])|[\x20-\x7E]/", $value); } + /** + * マルチバイト文字以外が含まれていればエラーとするバリデーションチェック + * Japanese ZENKAKU Validation + * (old name, keep this for backward compatibility) + */ + function zenkaku_only( &$model, $wordvalue){ + return $this->zenkakuOnly($model, $wordvalue); + } + /** @@ -221,18 +245,25 @@ function zenkaku_only( &$model, $wordvalue){ * @param array $wordvalue * @return boolean */ - function space_only( &$model, $wordvalue){ - + function spaceOnly( &$model, $wordvalue){ $value = array_shift($wordvalue); - if( mb_ereg_match("^(\s| )+$", $value) ){ - return false; }else{ return true; } } + /** + * 全角、半角スペースのみであればエラーとするバリデーションチェック + * Japanese Space only validation + * (old name, keep this for backward compatibility) + * + */ + function space_only( &$model, $wordvalue){ + return $this->spaceOnly($model, $wordvalue); + } + /** * only Allow 0-9, a-z , A-Z @@ -242,46 +273,83 @@ function space_only( &$model, $wordvalue){ * @param array $wordvalue * @return boolean */ - function alpha_number( &$model, $wordvalue ){ + function alphaNumber( &$model, $wordvalue ){ $value = array_shift($wordvalue); return preg_match( "/^[a-zA-Z0-9]*$/", $value ); } + /** + * only Allow 0-9, a-z , A-Z + * check it including Multibyte characters. + * (old name, keep this for backward compatibility) + * + */ + function alpha_number( &$model, $wordvalue ){ + return $this->alphaNumber($model, $wordvalue); + + } + + /** * Japan Telephone and Fax validation * */ - function tel_fax_jp(&$model, $wordvalue) { + function telFaxJp(&$model, $wordvalue) { $value = array_shift($wordvalue); $pattern = '/^(0\d{1,4}[\s-]?\d{1,4}[\s-]?\d{1,4}|\+\d{1,3}[\s-]?\d{1,4}[\s-]?\d{1,4}[\s-]?\d{1,4})$/'; return preg_match( $pattern, $value ); } + /** + * Japan Telephone and Fax validation + * (old name, keep this for backward compatibility) + * + */ + function tel_fax_jp(&$model, $wordvalue) { + return $this->telFaxJp($model, $wordvalue); + } + /** * Mobile Email validation * */ - function mobile_email_jp(&$model, $wordvalue) { + function mobileEmailJp(&$model, $wordvalue) { $value = array_shift($wordvalue); $pattern = '/^[a-z0-9\._-]{3,30}@(?:[a-z0-9][-a-z0-9]*\.)*(?:[a-z0-9][-a-z0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,4})$/i'; return preg_match( $pattern, $value ); } + /** + * Mobile Email validation + * (old name, keep this for backward compatibility) + * + */ + function mobile_email_jp(&$model, $wordvalue) { + return $this->mobileEmailJp($model, $wordvalue); + } + /** * password validation * Only AlphaNumeric , check letter length */ - function password_valid( &$model, $wordvalue , $compare_filed , $min=5, $max=15 ){ + function passwordValid( &$model, $wordvalue , $compare_filed , $min=5, $max=15 ){ $pass_val = $model->data[$model->alias][ $compare_filed ]; $pattern = '/^[a-zA-Z0-9]{'. $min .','. $max .'}$/'; return preg_match($pattern, $pass_val); } - + + /** + * password validation + * (old name, keep this for backward compatibility) + */ + function password_valid( &$model, $wordvalue , $compare_filed , $min=5, $max=15 ){ + return $this->passwordValid($model, $wordvalue , $compare_filed , $min, $max); + } /** * Datetime validation, determines if the string passed is a valid datetime. diff --git a/tests/cases/models/behaviors/add_validation_rule.test.php b/tests/cases/models/behaviors/add_validation_rule.test.php index 1bdba92..45184c5 100644 --- a/tests/cases/models/behaviors/add_validation_rule.test.php +++ b/tests/cases/models/behaviors/add_validation_rule.test.php @@ -56,12 +56,12 @@ class ValidationRule extends AddValidationRuleTestModel ), 'spaceonly' => array( - "rule5" => array('rule' => array('space_only'), + "rule5" => array('rule' => array('spaceOnly'), 'message' => 'スペース以外も入力してください' ), ), 'alphanumber' => array( - "rule7" => array('rule' => array('alpha_number'), + "rule7" => array('rule' => array('alphaNumber'), 'message' => '英数字のみで入力してください' ), ), @@ -78,7 +78,7 @@ class ValidationRule extends AddValidationRuleTestModel ), 'katakanaonly' => array( - "rule6" => array('rule' => array('katakana_only'), + "rule6" => array('rule' => array('katakanaOnly'), 'message' => 'カタカナのみ入力してください' ), ), @@ -87,28 +87,28 @@ class ValidationRule extends AddValidationRuleTestModel 'message' => '5文字以上10文字以内です' ), ), - 'hiragana_only' => array( - "rule8" => array('rule' => array('hiragana_only'), + 'hiraganaOnly' => array( + "rule8" => array('rule' => array('hiraganaOnly'), 'message' => 'ひらがなのみ入力してください' ), ), - 'zenkaku_only' => array( - "rule9" => array('rule' => array('zenkaku_only'), + 'zenkakuOnly' => array( + "rule9" => array('rule' => array('zenkakuOnly'), 'message' => '全角のみ入力してください' ), ), - 'tel_fax_jp' => array( - "rule10" => array('rule' => array('tel_fax_jp'), + 'telFaxJp' => array( + "rule10" => array('rule' => array('telFaxJp'), 'message' => '正しい電話番号を入力してください' ), ), - 'mobile_email_jp' => array( - "rule11" => array('rule' => array('mobile_email_jp'), + 'mobileEmailJp' => array( + "rule11" => array('rule' => array('mobileEmailJp'), 'message' => '正しい携帯メールアドレスを入力して下さい' ), ), - 'password_valid' => array( - "rule12" => array('rule' => array('password_valid','password_conf', 5, 10), + 'passwordValid' => array( + "rule12" => array('rule' => array('passwordValid','password_conf', 5, 10), 'message' => '正しいパスワードを入力して下さい' ), ), @@ -194,11 +194,11 @@ function testValidataionAllFail(){ 'minlengthjp' => 'あ', 'katakanaonly' => 'あ', 'betweenJP' => 'あいうえおかきくけこさしすせそ', - 'hiragana_only' => 'カタカナ', - 'zenkaku_only' => '090abc', - 'tel_fax_jp' => 'abcde', - 'mobile_email_jp' => 'aaaaaaa', - 'password_valid' => 'aa', + 'hiraganaOnly' => 'カタカナ', + 'zenkakuOnly' => '090abc', + 'telFaxJp' => 'abcde', + 'mobileEmailJp' => 'aaaaaaa', + 'passwordValid' => 'aa', 'password_conf' => 'aa', ), @@ -215,11 +215,11 @@ function testValidataionAllFail(){ $this->assertTrue( array_key_exists("minlengthjp" , $this->ValidationRule->validationErrors ) ); $this->assertTrue( array_key_exists("katakanaonly" , $this->ValidationRule->validationErrors ) ); $this->assertTrue( array_key_exists("betweenJP" , $this->ValidationRule->validationErrors ) ); - $this->assertTrue( array_key_exists("hiragana_only" , $this->ValidationRule->validationErrors ) ); - $this->assertTrue( array_key_exists("zenkaku_only" , $this->ValidationRule->validationErrors ) ); - $this->assertTrue( array_key_exists("tel_fax_jp" , $this->ValidationRule->validationErrors ) ); - $this->assertTrue( array_key_exists("mobile_email_jp" , $this->ValidationRule->validationErrors ) ); - $this->assertTrue( array_key_exists("password_valid" , $this->ValidationRule->validationErrors ) ); + $this->assertTrue( array_key_exists("hiraganaOnly" , $this->ValidationRule->validationErrors ) ); + $this->assertTrue( array_key_exists("zenkakuOnly" , $this->ValidationRule->validationErrors ) ); + $this->assertTrue( array_key_exists("telFaxJp" , $this->ValidationRule->validationErrors ) ); + $this->assertTrue( array_key_exists("mobileEmailJp" , $this->ValidationRule->validationErrors ) ); + $this->assertTrue( array_key_exists("passwordValid" , $this->ValidationRule->validationErrors ) ); } @@ -236,11 +236,11 @@ function testValidataionAllSuccess(){ 'minlengthjp' => 'あa', 'katakanaonly' => 'カタカナノミァィゥェォー゛゜', 'betweenJP' => 'あいうえおかきくけこ', - 'hiragana_only' => 'ひらがな', - 'zenkaku_only' => '全角のみです', - 'tel_fax_jp' => '03-1111-2222', - 'mobile_email_jp' => 'hoge..aa@softbank.ne.jp', - 'password_valid' => 'hoge1245', + 'hiraganaOnly' => 'ひらがな', + 'zenkakuOnly' => '全角のみです', + 'telFaxJp' => '03-1111-2222', + 'mobileEmailJp' => 'hoge..aa@softbank.ne.jp', + 'passwordValid' => 'hoge1245', 'password_conf' => 'hoge1245', ), ); @@ -256,11 +256,11 @@ function testValidataionAllSuccess(){ $this->assertFalse( array_key_exists("minlengthjp" , $this->ValidationRule->validationErrors ) ); $this->assertFalse( array_key_exists("katakanaonly" , $this->ValidationRule->validationErrors ) ); $this->assertFalse( array_key_exists("betweenJP" , $this->ValidationRule->validationErrors ) ); - $this->assertFalse( array_key_exists("hiragana_only" , $this->ValidationRule->validationErrors ) ); - $this->assertFalse( array_key_exists("zenkaku_only" , $this->ValidationRule->validationErrors ) ); - $this->assertFalse( array_key_exists("tel_fax_jp" , $this->ValidationRule->validationErrors ) ); - $this->assertFalse( array_key_exists("mobile_email_jp" , $this->ValidationRule->validationErrors ) ); - $this->assertFalse( array_key_exists("password_valid" , $this->ValidationRule->validationErrors ) ); + $this->assertFalse( array_key_exists("hiraganaOnly" , $this->ValidationRule->validationErrors ) ); + $this->assertFalse( array_key_exists("zenkakuOnly" , $this->ValidationRule->validationErrors ) ); + $this->assertFalse( array_key_exists("telFaxJp" , $this->ValidationRule->validationErrors ) ); + $this->assertFalse( array_key_exists("mobileEmailJp" , $this->ValidationRule->validationErrors ) ); + $this->assertFalse( array_key_exists("passwordValid" , $this->ValidationRule->validationErrors ) ); } @@ -344,62 +344,62 @@ function testValidataionBetweenJP(){ } - //hiragana_only テスト + //hiraganaOnly テスト function testValidataionHiraganaOnly(){ $setFailData = array('あカナ','abあい', '0011ええおお','漢字も' ); $setSuccessData = array('がぎぁ', 'たーいへーいよー', 'にゃぴょにょ'); - $field = 'hiragana_only'; + $field = 'hiraganaOnly'; $this->_failSuccessTest($setFailData, $setSuccessData, $field); } - //zenkaku_only テスト + //zenkakuOnly テスト function testValidataionZenkakuOnly(){ $setFailData = array('*カナ','abあい', '0011ええおお','漢字も!' ); $setSuccessData = array('漢字も', 'カタカナも', '今日はグッド!!'); - $field = 'zenkaku_only'; + $field = 'zenkakuOnly'; $this->_failSuccessTest($setFailData, $setSuccessData, $field); } - //tel_fax_jp テスト + //telFaxJp テスト function testValidataionTelFaxJp(){ $setFailData = array('03-111111-22222', 'aaa-cc-111', 'あああ-222' ); $setSuccessData = array('03-1111-2222', '0565-23-2222', '011-222-1111'); - $field = 'tel_fax_jp'; + $field = 'telFaxJp'; $this->_failSuccessTest($setFailData, $setSuccessData, $field); } - //mobile_email_jp テスト + //mobileEmailJp テスト function testValidataionMobileEmailJp(){ $setFailData = array('hoge', 'aa@aaaa', 'aa#!"@aa.com' ); $setSuccessData = array('hoge@docomo.ne.jp', 'hoge..aa@ezweb.ne.jp', 'a_._.e@softbank.ne.jp'); - $field = 'mobile_email_jp'; + $field = 'mobileEmailJp'; $this->_failSuccessTest($setFailData, $setSuccessData, $field); } - //password_valid テスト + //passwordValid テスト function testValidataionPasswordValid(){ $setFailData = array('hoge', 'aa@aaaa', 'aa#!"@aa.com','あああああ','123456789aa' ); $setSuccessData = array('hogeaaaa', '12345567', 'aaa13', '123456789a'); - $field = 'password_valid'; + $field = 'passwordValid'; $field_conf = 'password_conf'; //失敗パターン From e84f014eb40bf847db5f6c72cd341444b3b85cbd Mon Sep 17 00:00:00 2001 From: Yasushi Ichikawa Date: Fri, 31 Dec 2010 18:35:19 +0900 Subject: [PATCH 7/7] modify logic of Hiragana and Katakana validation --- models/behaviors/add_validation_rule.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/models/behaviors/add_validation_rule.php b/models/behaviors/add_validation_rule.php index c9ec680..edf4853 100644 --- a/models/behaviors/add_validation_rule.php +++ b/models/behaviors/add_validation_rule.php @@ -177,7 +177,7 @@ function compare2fields( &$model, $wordvalue , $compare_field , $auth = false ){ */ function hiraganaOnly( &$model, $wordvalue){ $value = array_shift($wordvalue); - return preg_match("/^[ぁ-んー]*$/u", $value); + return preg_match("/^(\xe3(\x81[\x81-\xbf]|\x82[\x80-\x93]|\x83\xbc))*$/", $value); } /** @@ -199,8 +199,10 @@ function hiragana_only( &$model, $wordvalue){ */ function katakanaOnly( &$model, $wordvalue){ $value = array_shift($wordvalue); - return preg_match("/^[ァ-ヶー゛゜]*$/u", $value); + //\xe3\x82\x9b 濁点゛ + //\xe3\x82\x9c 半濁点゜ + return preg_match("/^(\xe3(\x82[\xa1-\xbf]|\x83[\x80-\xb6]|\x83\xbc|\x82\x9b|\x82\x9c))*$/", $value); } /**