-1

米国の電話番号のフィールドを検証しようとしていますが、フィールドに入力された情報が有効でない場合はエラーを返します。正規表現が有効であるように見えても、現在、入力された情報を有効として受け入れていません。

add_action('register_form','myplugin_register_form2');
function myplugin_register_form2 (){
    $phone_number = ( isset( $_POST['phone_number'] ) ) ? $_POST['phone_number']: '';
    ?>
    <p id="phone_number">
        <label for="phone_number"><?php _e('Phone Number <font size="1">(XXX XXX XXXX)</font>','mydomain') ?><br />
            <input type="text" name="phone_number" id="phone_number" class="input" size="25" style="text-align:right" maxlength="14" />
    </p>
    <?php
}

//2. Phone_number Requirement
add_filter('registration_errors', 'myplugin_registration_errors2', 10, 3);
function myplugin_registration_errors2 ($errors, $sanitized_user_login, $user_email) {
$pattern = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/';
if (!preg_match($pattern, $phone_number, $matches))
{
        $errors->add( 'phone_number_error', __('<strong>ERROR</strong>: You must include a valid phone number.','mydomain') );

    return $errors;
} 

    if ( empty( $_POST['phone_number'] ) )
        $errors->add( 'phone_number_error', __('<strong>ERROR</strong>: You must include a valid phone number.','mydomain') );

    return $errors;
}
4

1 に答える 1

0

OK、エラーをスローしないものを見つけました:

/^(?:(?:(?:1[.\/\s-]?)(?!\())?(?:\((?=\d{3}\)))?((?(?!(37|96))[2-9][0-8][0-9](?<!(11)))?[2-9])(?:\((?<=\(\d{3}))?)?[.\/\s-]?([0-9]{2}(?<!(11)))[.\/\s-]?([0-9]{4}(?<!(555(01([0-9][0-9])|1212))))(?:[\s]*(?:(?:x|ext|extn|ex)[.:]*|extension[:]?)?[\s]*(\d+))?$/

ただし、最初に非数値をすべて削除する必要があります。

$input_number=preg_replace("[^0-9]","",$input_number);

これにより、必要に応じて番号をフォーマットすることもできます。

preg_match($pattern,$input_number);
$number=$result[1] . "-" . $result[4] . "-" . $result[6];

別の方法は、上記のスレッドで説明されているように、jQuery で入力マスクを設定することです。その後、ユーザーは有効な電話番号のみを入力できます。

多くの形式に一致する適切な正規表現が見つかりませんでした。

于 2013-06-22T12:18:25.823 に答える