From f2b72c9cd13bd0de06c8930a95609d9a9edf716e Mon Sep 17 00:00:00 2001 From: otsuka Date: Thu, 16 Jul 2026 17:42:06 +0900 Subject: [PATCH 1/4] CU_ALL_TEST-16 No.61 --- .../baser-core/src/Model/Table/UsersTable.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/baser-core/src/Model/Table/UsersTable.php b/plugins/baser-core/src/Model/Table/UsersTable.php index 068ccb7b07..22c22435e3 100644 --- a/plugins/baser-core/src/Model/Table/UsersTable.php +++ b/plugins/baser-core/src/Model/Table/UsersTable.php @@ -151,11 +151,25 @@ public function validationDefault(Validator $validator): Validator ->scalar('real_name_1') ->maxLength('real_name_1', 50, __d('baser_core', '名前[姓]は50文字以内で入力してください。')) ->requirePresence('real_name_1', 'create', __d('baser_core', '名前[姓]を入力してください。')) - ->notEmptyString('real_name_1', __d('baser_core', '名前[姓]を入力してください。')); + ->notEmptyString('real_name_1', __d('baser_core', '名前[姓]を入力してください。')) + ->add('real_name_1', [ + 'noWhitespace' => [ + 'rule' => function ($value) { + return !preg_match('/[\s ]/u', $value); + }, + 'message' => __d('baser_core', '名前[姓]に半角・全角スペースは使用できません。') + ]]); $validator ->scalar('real_name_2') ->maxLength('real_name_2', 50, __d('baser_core', '名前[名]は50文字以内で入力してください。')) - ->allowEmptyString('real_name_2'); + ->allowEmptyString('real_name_2') + ->add('real_name_2', [ + 'noWhitespace' => [ + 'rule' => function ($value) { + return !preg_match('/[\s ]/u', $value); + }, + 'message' => __d('baser_core', '名前[名]に半角・全角スペースは使用できません。') + ]]); $validator ->scalar('nickname') ->maxLength('nickname', 255, __d('baser_core', 'ニックネームは255文字以内で入力してください。')) From 4fbfab90f14774f3c23e969074881b4bd657a19e Mon Sep 17 00:00:00 2001 From: otsuka Date: Fri, 17 Jul 2026 10:58:01 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E3=83=90=E3=83=AA=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E6=9D=A1=E4=BB=B6=E3=82=92?= =?UTF-8?q?=E5=8D=8A=E8=A7=92=E3=83=BB=E5=85=A8=E8=A7=92=E3=82=B9=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E5=85=A5=E5=8A=9B=E6=99=82=E3=81=A0=E3=81=91?= =?UTF-8?q?=E3=81=AB=E7=B5=9E=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/baser-core/src/Model/Table/UsersTable.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/baser-core/src/Model/Table/UsersTable.php b/plugins/baser-core/src/Model/Table/UsersTable.php index 22c22435e3..d7ceecd9f6 100644 --- a/plugins/baser-core/src/Model/Table/UsersTable.php +++ b/plugins/baser-core/src/Model/Table/UsersTable.php @@ -155,7 +155,7 @@ public function validationDefault(Validator $validator): Validator ->add('real_name_1', [ 'noWhitespace' => [ 'rule' => function ($value) { - return !preg_match('/[\s ]/u', $value); + return !preg_match('/[  ]/u', $value); }, 'message' => __d('baser_core', '名前[姓]に半角・全角スペースは使用できません。') ]]); @@ -166,7 +166,7 @@ public function validationDefault(Validator $validator): Validator ->add('real_name_2', [ 'noWhitespace' => [ 'rule' => function ($value) { - return !preg_match('/[\s ]/u', $value); + return !preg_match('/[  ]/u', $value); }, 'message' => __d('baser_core', '名前[名]に半角・全角スペースは使用できません。') ]]); From 51d961f09390b6ac8cf680a7ac021ce4b6f5685b Mon Sep 17 00:00:00 2001 From: otsuka Date: Thu, 23 Jul 2026 12:13:30 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E5=90=8D=E5=89=8D=E9=96=93=E3=81=AE?= =?UTF-8?q?=E3=82=B9=E3=83=9A=E3=83=BC=E3=82=B9=E3=81=AF=E8=A8=B1=E5=AE=B9?= =?UTF-8?q?=E3=81=95=E3=81=9B=E3=80=81=E5=90=8D=E5=89=8D=E3=81=AE=E5=85=88?= =?UTF-8?q?=E9=A0=AD=E3=81=A8=E6=9C=AB=E5=B0=BE=E3=81=AE=E3=82=B9=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E3=82=92=E5=8F=96=E3=82=8A=E9=99=A4=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baser-core/src/Model/Table/UsersTable.php | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/plugins/baser-core/src/Model/Table/UsersTable.php b/plugins/baser-core/src/Model/Table/UsersTable.php index d7ceecd9f6..3ce57c35a3 100644 --- a/plugins/baser-core/src/Model/Table/UsersTable.php +++ b/plugins/baser-core/src/Model/Table/UsersTable.php @@ -79,6 +79,11 @@ public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $opti (isset($data['password_2']) && $data['password_2'] !== '')) { $data['password'] = $data['password_1']; } + foreach(['real_name_1', 'real_name_2'] as $field) { + if (isset($data[$field]) && is_string($data[$field])) { + $data[$field] = preg_replace('/^[  ]+|[  ]+$/u', '', $data[$field]); + } + } } /** @@ -151,25 +156,11 @@ public function validationDefault(Validator $validator): Validator ->scalar('real_name_1') ->maxLength('real_name_1', 50, __d('baser_core', '名前[姓]は50文字以内で入力してください。')) ->requirePresence('real_name_1', 'create', __d('baser_core', '名前[姓]を入力してください。')) - ->notEmptyString('real_name_1', __d('baser_core', '名前[姓]を入力してください。')) - ->add('real_name_1', [ - 'noWhitespace' => [ - 'rule' => function ($value) { - return !preg_match('/[  ]/u', $value); - }, - 'message' => __d('baser_core', '名前[姓]に半角・全角スペースは使用できません。') - ]]); + ->notEmptyString('real_name_1', __d('baser_core', '名前[姓]を入力してください。')); $validator ->scalar('real_name_2') ->maxLength('real_name_2', 50, __d('baser_core', '名前[名]は50文字以内で入力してください。')) - ->allowEmptyString('real_name_2') - ->add('real_name_2', [ - 'noWhitespace' => [ - 'rule' => function ($value) { - return !preg_match('/[  ]/u', $value); - }, - 'message' => __d('baser_core', '名前[名]に半角・全角スペースは使用できません。') - ]]); + ->allowEmptyString('real_name_2'); $validator ->scalar('nickname') ->maxLength('nickname', 255, __d('baser_core', 'ニックネームは255文字以内で入力してください。')) From 71ef10b85c8fa6bc093335fe6cc3b7b5c6061efa Mon Sep 17 00:00:00 2001 From: otsuka Date: Fri, 31 Jul 2026 12:58:10 +0900 Subject: [PATCH 4/4] =?UTF-8?q?UsersTableTest=20=E3=81=AB=E3=82=B9?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B9=E5=85=A5=E5=8A=9B=E6=99=82=E3=81=AE?= =?UTF-8?q?=E5=A4=B1=E6=95=97=E3=82=B1=E3=83=BC=E3=82=B9=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TestCase/Model/Table/UsersTableTest.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/plugins/baser-core/tests/TestCase/Model/Table/UsersTableTest.php b/plugins/baser-core/tests/TestCase/Model/Table/UsersTableTest.php index bb50f37d31..1e0a2fbf1e 100644 --- a/plugins/baser-core/tests/TestCase/Model/Table/UsersTableTest.php +++ b/plugins/baser-core/tests/TestCase/Model/Table/UsersTableTest.php @@ -92,6 +92,37 @@ public function testBeforeMarshal() $this->assertNotEmpty($user->password); } + /** + * Test beforeMarshal + * + * real_name_1/real_name_2 は前後の半角・全角スペースのみ除去し、間のスペースは保持すること + */ + public function testBeforeMarshalTrimsRealName() + { + $user = $this->Users->newEntity([ + 'real_name_1' => "  山田 太郎  ", + 'real_name_2' => "  鈴木 一郎  ", + ], ['validate' => false]); + $this->assertEquals('山田 太郎', $user->real_name_1); + $this->assertEquals('鈴木 一郎', $user->real_name_2); + } + + /** + * Test beforeMarshal + * + * real_name_1/real_name_2 がスペースのみの場合、トリムされて空文字になり、 + * real_name_1 は必須バリデーションでエラーになり、real_name_2 は空文字を許容してエラーにならないこと + */ + public function testBeforeMarshalRealNameOnlySpace() + { + $user = $this->Users->newEntity([ + 'real_name_1' => ' ', + 'real_name_2' => '   ', + ]); + $this->assertNotEmpty($user->getError('real_name_1')); + $this->assertEmpty($user->getError('real_name_2')); + } + /** * Test afterMarshal */