まだまだ試行の余地がありそうですが
とりあえず。
パスワードのinputからフォーカスが離れたときに文字数チェックするようにもしました
あれ、名前の方もこれでいいのでは??
$(function(){
//英数字のみ
$('#u_name').keyup(function(){
var v = $(this).val();
$(this).val(v.replace(/[^a-zA-Z0-9]/g,''));
});
$('#u_password').keyup(function(){//同じ
console.log("in u_password funcion");
var v = $(this).val();
$(this).val(v.replace(/[^a-zA-Z0-9]/g,''));
console.log(v.length);
});
//パスワードの文字数は適切かどうか
$('#u_password').on('blur',function(){
var str = $('#u_password').val();
var strnum = (str.length);
console.log(strnum);
if (strnum<8 || strnum>32){
console.log("bad pass");
var elehoge="文字数エラーです";
console.log(elehoge);
$('#passhoge').text(elehoge).css('color','#f00');
$('#u_password').val("");//なぜかここがtextだと動かずvalだとok。なぜだ。
$('#u_password').focus();
}else{
$('#passhoge').text("okです");
}
});
//名前の整合性チェック
$('#name_check').on('click',function(){
$('#name_checked').text("");//結果表示初期化
//まず名前文字数がオーバーしているか
var namestr =$('#u_name').val();
var stringCount = namestr.length;
if (stringCount>16){
console.log("文字多すぎ");
var elehoge = $('<p>').text("名前は16文字以内です").css('color','#f00');
elehoge.attr('class','name_NG');
$('#name_checked').append(elehoge);
$('#u_name').val("");//ここはtextじゃなくてval
$('#u_name').focus();
$('#name_ok').val(0);//隠しinputにvalを与える
}else{
//ajax通信
$.ajax({
url:'api/get_name.php',
type:'get',
data:{'u_name':$('#u_name').val()},
dataType:'text',
})
.done(function(d){
$hoge =d;
console.log($hoge);
$('#name_checked').text("");
if (d==0){//名前被りなし
console.log("name ok");
var elehoge = $('<p>').text("使用可能です").css('color','#99f');
elehoge.attr('class','name_ok');
$('#name_checked').append(elehoge);
$('#name_ok').val(1);//隠しinputにvalを与える
}else{//かぶった
console.log("name NG");
var elehoge = $('<p>').text("この名前は既に使われています").css('color','#f00');
elehoge.attr('class','name_NG');
$('#name_checked').append(elehoge);
$('#u_name').val("");//ここはtextじゃなくてval
$('#u_name').focus();
}
})
.fail(function(){
alert('NG');
});//ajaxのおわり
}//ifのおわり
});//on clickのおわり
/*
$('#english_num_only').on('keydown',function(e){
console.log("now in keydown");
let k = e.keyCode;
let str = String.fromCharCode(k);
//以下に当てはまらねば弾く。数字と英文字、shift,矢印キー、backspace,delete,F1?,半角全角,ハイフン、テンキーの数字
if(!(str.match(/[0-9a-zA-Z]/) || e.shiftKey || (37 <= k && k <= 40) || k == 8 || k == 46|| k == 112|| k == 244|| k == 189|| k >= 96 && k<=105)){
return false;
}
});//onの終わり
//全角禁止
$('#english_num_only').on('keyup', function(e){
if(e.keyCode == 9 || e.keyCode == 16) return;
this.value = this.value.replace(/[^0-9a-zA-Z]+/i,'');
});
$('#english_num_only').on('blur',function(){
this.value = this.value.replace(/[^0-9a-zA-Z]+/i,'');
});
*/
});
試行錯誤のしかばねもコメントアウトして残すのが自分流です。 後で必要になるかもと思うと失敗した部分もなかなか消せない。