Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…into morishita1222-dev-#1700
  • Loading branch information
gondoh committed Jun 21, 2021
2 parents 3e6928a + 6a979d6 commit 9940d43
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 16 deletions.
1 change: 1 addition & 0 deletions lib/Baser/Plugin/Mail/Model/MailField.php
Expand Up @@ -189,6 +189,7 @@ public function getControlSource($field = null)
'VALID_FILE_EXT' => __d('baser', 'ファイル拡張子チェック'),
'VALID_ZENKAKU_KATAKANA' => __d('baser', '全角カタカナチェック'),
'VALID_ZENKAKU_HIRAGANA' => __d('baser', '全角ひらがなチェック'),
'VALID_NOT_EMOJI' => __d('baser', '絵文字を含めない'),
'VALID_REGEX' => __d('baser', '正規表現チェック'),
];
$source['auto_convert'] = ['CONVERT_HANKAKU' => __d('baser', '半角変換')];
Expand Down
63 changes: 47 additions & 16 deletions lib/Baser/Plugin/Mail/Model/MailMessage.php
Expand Up @@ -219,16 +219,20 @@ protected function _setValidate()
$this->validate[$mailField['field_name']] = $mailField['valid'];
}
if (!empty($this->data['MailMessage'][$mailField['field_name']]) && $mailField['valid'] == 'VALID_EMAIL') {
$this->validate[$mailField['field_name']] = [
'email' => [
'rule' => ['email'],
'message' => __('形式が無効です。')
],
'english' => [
'rule' => '/^[a-zA-Z0-9!#$%&\’*+-\/=?^_`{|}~@.]*$/',
'message' => __('半角で入力してください。')
]
];
if (preg_match('/[^a-zA-Z0-9@\._\+\-]/u', $this->data['MailMessage'][$mailField['field_name']])) {
preg_match_all('/[^a-zA-Z0-9@\._\+\-]/u', $this->data['MailMessage'][$mailField['field_name']], $notForEmailArray);
$notForEmail = implode('', $notForEmailArray[0]);
$this->invalidate($mailField['field_name'], __('次の文字はメールアドレスでは受け付けられません: ' .$notForEmail));
}
elseif (strpos($this->data['MailMessage'][$mailField['field_name']], '@') === false){
$this->invalidate($mailField['field_name'], __('@が必要です。'));
}
else {
$this->validate[$mailField['field_name']] = array('email' => array(
'rule' => array('email'),
'message' => __('形式が無効です。「XXXXXXXXXX@XXX.XX」で記述してください。')
));
}
}
}
// ### 拡張バリデーション
Expand Down Expand Up @@ -325,18 +329,29 @@ protected function _validExtends($data)
}
continue;
}

if (in_array('VALID_ZENKAKU_KATAKANA', $valids)) {
if (!preg_match('/^(|[ァ-ヾ  ]+)$/u', $data['MailMessage'][$field_name])) {
$this->invalidate($field_name, __('全て全角カタカナで入力してください。'));
if (!preg_match('/^(|[ァ-ヾ  ]+)$/u', $this->data['MailMessage'][$mailField['field_name']])) {
preg_match_all('/[^ァ-ヾ  ]/u', $this->data['MailMessage'][$mailField['field_name']], $notKatakanaArray);
$notKatakana = implode('', $notKatakanaArray[0]);
$this->invalidate($mailField['field_name'], __('次の文字はカタカナではないので受け付けられません: ' . $notKatakana));
}
continue;
}

if (in_array('VALID_ZENKAKU_HIRAGANA', $valids)) {
if (!preg_match('/^([  \t\r\n]|[ぁ-ん]|[ー])+$/u', $data['MailMessage'][$field_name])) {
$this->invalidate($field_name, __('全て全角ひらがなで入力してください。'));
if (!preg_match('/^(|[ぁ-ゞ  ]+)$/u', $this->data['MailMessage'][$mailField['field_name']])) {
preg_match_all('/[^ぁ-ゞ ]/u', $this->data['MailMessage'][$mailField['field_name']], $notHiraganaArray);
$notHiragana = implode('', $notHiraganaArray[0]);
$this->invalidate($mailField['field_name'], __('次の文字はひらがなではないので受け付けられません: ' . $notHiragana));
}
continue;
}
if (in_array('VALID_NOT_EMOJI', $valids)) {
if (preg_match('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', $data['MailMessage'][$mailField['field_name']])) {
preg_match_all('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', $data['MailMessage'][$mailField['field_name']], $emojiArray);
$emoji = implode('', $emojiArray[0]);
$this->invalidate($mailField['field_name'], __('『' . $emoji . '』は『' . $mailField['name'] . '』に利用できません。取り除くか、もしくは文字による代替をしてください。'));
}
continue;
}
}
}
Expand Down Expand Up @@ -534,6 +549,22 @@ public function autoConvert($data)
if (!is_array($value)) {
$value = trim($value);
}
// メールアドレスを半角に変換
if ($mailField['valid'] == 'VALID_EMAIL') {
$value = mb_convert_kana($value, 'a');
}
// 半角カタカナ・全角カタカナをひらがなに変換・半角スペースを全角スペースに変換
if ($mailField['valid_ex'] == 'VALID_ZENKAKU_HIRAGANA') {
$value = mb_convert_kana($value, 'H');
$value = mb_convert_kana($value, 'c');
$value = mb_convert_kana($value, 'S');
}
// ひらがな・半角カタカナを全角カタカナに変換
if ($mailField['valid_ex'] == 'VALID_ZENKAKU_KATAKANA') {
$value = mb_convert_kana($value, 'C');
$value = mb_convert_kana($value, 'K');
$value = mb_convert_kana($value, 'S');
}
}

$data['MailMessage'][$mailField['field_name']] = $value;
Expand Down

0 comments on commit 9940d43

Please sign in to comment.