Skip to content

Commit

Permalink
【フォーム】Eメールチェックの機能追加 baserproject#1700
Browse files Browse the repository at this point in the history
  • Loading branch information
morishi authored and morishi committed May 5, 2021
1 parent 3e541f2 commit 02e38c0
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 6 deletions.
1 change: 1 addition & 0 deletions lib/Baser/Plugin/Mail/Model/MailField.php
Original file line number Diff line number Diff line change
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
39 changes: 33 additions & 6 deletions lib/Baser/Plugin/Mail/Model/MailMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -325,18 +325,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 +545,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 02e38c0

Please sign in to comment.