PHPの正規表現のパターンで英字数字が少なくても一文字以上含まれていることだけを検証したい場合は、以下のパターンで正しいでしょうか?
if(!preg_match('/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]\z/i',$password)){ $errors['not_match_password'] = '英字と数字両方を含むパスワードを入力してください'; }
追記
正規表現のパターンはこちらの記事を参考にしました。
現状、パスワードに英字と数字両方を入力しても正規表現パターンにマッチしないといった状態です。
以下は、バリデーションチェックを行っているコードの詳細になります。
<?php $errors = []; $nick_name = filter_input(INPUT_POST,'nick_name'); $nick_name = trim(mb_convert_kana($nick_name,'s','UTF-8')); $email = filter_input(INPUT_POST,'email'); $email = trim(mb_convert_kana($email,'s','UTF-8')); // var_dump($email); $password = filter_input(INPUT_POST,'password'); $password_check = filter_input(INPUT_POST,'password_check'); $family_name_kanji = filter_input(INPUT_POST,'family_name_kanji'); $family_name_kanji = trim(mb_convert_kana($family_name_kanji,'s','UTF-8')); $first_name_kanji = filter_input(INPUT_POST,'first_name_kanji'); $first_name_kanji = trim(mb_convert_kana($first_name_kanji,'s','UTF-8')); $family_name_kana = filter_input(INPUT_POST,'family_name_kana'); $family_name_kana = trim(mb_convert_kana($family_name_kana,'s','UTF-8')); $first_name_kana = filter_input(INPUT_POST,'first_name_kana'); $first_name_kana = trim(mb_convert_kana($first_name_kana,'s','UTF-8')); $year = filter_input(INPUT_POST,'year'); $month = filter_input(INPUT_POST,'month'); $day = filter_input(INPUT_POST,'day'); if(!$nick_name){ $errors['empty_nick_name'] = 'ニックネームが入力されていません'; }else{ if(mb_strlen($nick_name,'UTF-8') > 20){ $errors['over_nick_name'] = 'ニックネームは20文字以内で入力してください'; } } if(!$email){ $errors['empty_email'] = 'メールアドレスが入力されていません'; }else{ if(!filter_var($email,FILTER_VALIDATE_EMAIL)){ $errors['email_format_err'] = 'メールアドレスの形式が正しくありません'; } } if(!$password){ $errors['empty_password'] = 'パスワードを入力してください'; }else{ if(mb_strlen($password,'UTF-8') < 7 || mb_strlen($password,'UTF-8') > 128 ){ $errors['less_password'] = 'パスワードは7文字以上128文字以下で入力してください'; } if(!preg_match('/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]\z/i',$password)){ $errors['not_match_password'] = '英字と数字両方を含むパスワードを入力してください'; } } foreach($errors as $err){ echo $err . "<br>"; }
html部分は以下になります。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>test</title> <script src="https://www.google.com/recaptcha/api.js"></script> </head> <body> <h1>会員情報入力</h1> <form action="form_check1.php" method="post" id="user_register_form"> <p>ニックネーム <input type="text" name="nick_name" placeholder="例)太郎"> </p> <p> メールアドレス <input type="email" name="email" placeholder="PC・携帯どちらでも可"> </p> <p> パスワード <input type="password" name="password" placeholder="7文字以上"> </p> <p> パスワード(確認): <input type="password" name="check_password" placeholder="7文字以上"> </p> <p> お名前(全角) <input type="text" name="family_name_kanji" placeholder="例)山田"> <input type="text" name="first_name_kanji" placeholder="例)太郎"> </p> <p> お名前カナ(全角) <input type="text" name="family_name_kana" placeholder="例)ヤマダ"> <input type="text" name="first_name_kana" placeholder="例)タロウ"> </p> <p> 生年月日 <select name="year" id="year_id"> </select> <select name="month" id="month_id"> </select> <select name="day" id="day_id"> </select> </p> <div class="g-recaptcha" data-sitekey="sitekey"></div> <input type="submit" value="送信"> </form> </body> <!-- <script src="ja/validation.js"></script> --> </html>
回答2件
あなたの回答
tips
プレビュー