C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

isNaNの使い方&全角数字の判定

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■94695 / inTopicNo.1)  isNaNの使い方&全角数字の判定
  
□投稿者/ 初心者です。 (4回)-(2020/05/06(Wed) 13:19:48)

分類:[JavaScript] 

ASP.Net
Javascript
Jquery
web Form

お世話になっております。
昨日も質問させていただいたのですが、不明な点がありましたので質問致します。
宜しくお願い致します。

下記昨日のリンク先
http://bbs.wankuma.com/index.cgi?mode=al2&namber=94686

全角⇒半角に変換はできました。
そこで、数字のみ入力可能にしたかったのでisNaNを加えてみました。

//全角⇒半角に変換
var zen2han = function (str) {
    str = str.replace(/[0-9]/g, function (s) {
        return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
    })
    return str;
}

$(Function(){   
    var str = "";
    $("#Txt_Number").on("change", function () {
        //数字入力のみ
        if (isNaN == false) {
            str = $(this).val();
            $(this).val(zen2han(str));
        } else {
            //数字以外は空にする
            $(this).val('');
        }
    });
});

半角の数字は数字として判定されるのですが全角の数字は数字として判定されません。

下記リンクを参考に見ていたのですが、「isNaN() 関数を使う際の注意点」のところで
https://uxmilk.jp/46961

isNaN() 関数は、関数実行時に引数に対して Number() 関数と等価の型変換を行います。
そのため、引数が '123' のような文字列だった場合でも、数値の 123 に変換した後に判定を行うため、falseが返されます。
同様に、true や false のブーリアン値もそれぞれ 1 と 0 に変換された後に判定されるため、false が返されます。

と記述がありました。
これは全角の数字も数字と判定されるという意味ではないのでしょうか?
また、全角の数字も数字と判定させるにはどのようにすればよいのでしょうか?

お手数をおかけ致しますが、宜しくお願い致します。


引用返信 編集キー/
■94696 / inTopicNo.2)  Re[1]: isNaNの使い方&全角数字の判定
□投稿者/ キングダム (56回)-(2020/05/06(Wed) 15:49:43)
No94695 (初心者です。 さん) に返信

> これは全角の数字も数字と判定されるという意味ではないのでしょうか?

全角の数字を数字と判定するかは文章内には書かれてないです
他のドキュメントを探すなり実際に動かして調べるなりしないとわからないです

> また、全角の数字も数字と判定させるにはどのようにすればよいのでしょうか?

まずはisNaN関数を正しく使うところからじゃないですかね
isNaN関数は引数を取るのでisNaN == falseではチェックになってないですよ
引用返信 編集キー/
■94697 / inTopicNo.3)  Re[2]: isNaNの使い方&全角数字の判定
□投稿者/ 初心者です。 (5回)-(2020/05/06(Wed) 16:30:55)
No94696 (キングダム さん) に返信
> 全角の数字を数字と判定するかは文章内には書かれてないです
> 他のドキュメントを探すなり実際に動かして調べるなりしないとわからないです

ご回答ありがとうございます。
てっきり全角数字は文字列という捉え方なのだと勘違いしていました。

色々と一日かけて探しているのですがなかなか見つからず、このように質問する形になりました。

> まずはisNaN関数を正しく使うところからじゃないですかね
> isNaN関数は引数を取るのでisNaN == falseではチェックになってないですよ

デバックで確認したところチェックできていなかったです(汗)
isNaN == false⇒!isNaN($(this).val())に修正したところできました。

ただやはり全角数字は数字とみていないみたいです・・・。

引用返信 編集キー/
■94698 / inTopicNo.4)  Re[3]: isNaNの使い方&全角数字の判定
□投稿者/ 初心者です。 (6回)-(2020/05/06(Wed) 16:41:46)
2020/05/06(Wed) 16:42:51 編集(投稿者)
すみません、自己解決しました。
数字チェックをする前に全角を半角に変換してから数字チェックをすることでうまくいきました。

下記修正コード
//全角⇒半角に変換
var zen2han = function (str) {
    str = str.replace(/[0-9]/g, function (s) {
        return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
    })
    return str;
}

$(Function(){   
    var str = "";
    $("#Txt_Number").on("change", function () {
        str = $(this).val();
        var num = zen2han(str);
    //数字入力のみ
        if (!isNaN(num)) {
            $(this).val(num);
        } else {
            $(this).val('');
        }
    });
});

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ