私のサイトでは、ユーザーは電話番号を入力して認証を受け、SMS で登録する必要があります。以下の関数では、ユーザーはエラーを受け取ります:
- 電話番号が空の場合
- 電話番号が存在する場合(登録済み)
- 電話番号が10桁未満の場合
国コードの前に00または+を入力した場合、自動削除/無視したいと思います。(したがって、004798765432 または +4798765432 を入力すると、正しい値は 4798765432 になります)。
また、入力した電話番号が単一の 0 で始まる場合は、別のエラーを表示したいと思います (したがって、02298765432 を入力すると、次のようなエラー メッセージが表示されます: 入力した電話番号は国際電話番号ではありません)。
私が使用しているコードは次のとおりです。
function registration_errors( $errors ) {
$enabled = csnetworks_sms_get_option( 'register_form' );
if ( $enabled == 'on' ) {
$phone = $_POST['user_phone'];
if ( $phone == '' ) {
$errors->add( 'empty_phone', __( '<strong>ERROR</strong>: Please type your phone number.', 'csnetworks' ) );
} else if ( phone_exists( $phone ) ) {
$errors->add( 'phone_exists', __( '<strong>ERROR</strong>: Phone number is already registered.', 'csnetworks' ) );
} else {
if ( preg_match( '/[^\d]/', $phone ) || (strlen( $phone ) < 10 ) ) {
$errors->add( 'invalid_phone', __( '<strong>ERROR</strong>: Please type a valid phone number (10 digit min.)', 'csnetworks' ) );
}
}
}
return $errors;
}
/** 最後に、この解決策がうまくいきました */
/**
* Validates phone number
*
* @param type $errors
* @return type
*/
function registration_errors( $errors ) {
$enabled = csnetworks_sms_get_option( 'register_form' );
if ( $enabled == 'on' ) {
$phone = $_POST['user_phone'];
if ($phone[1] == '0') $phone = substr($phone, 2);
if ($phone[0] == '0') { $errors->add( 'invalid_inter_phone', __( 'エラー: 入力した電話番号は国際電話番号ではありません.', 'csnetworks' ) ); } if ( $phone == '' ) { $errors->add( 'empty_phone', __( 'エラー: 電話番号を入力してください。', 'csnetworks' ) ); } else if ( phone_exists( $phone ) ) { $errors->add( 'phone_exists', __( 'エラー: 電話番号は既に登録されています.', 'csnetworks' ) ); } else { if ( preg_match( '/[^\d]/', $phone ) || (strlen( $phone ) < 10 ) ) { $errors->add( 'invalid_phone', __( 'エラー:
(最小 10 桁。"+" は使用しないでください)', 'csnetworks' ) ); }
}
}
return $errors;
}