23

電子メール アドレスの国際化されたドメイン名とローカル部分を検出しようとしています。これを正規表現または Javascript ですばやく簡単に行う方法があるかどうかを知りたいです。

4

4 に答える 4

28

これで済むはず…

var hasMoreThanAscii = /^[\u0000-\u007f]*$/.test(str);

...また...

var hasMoreThanAscii = str
                       .split("")
                       .some(function(char) { return char.charCodeAt(0) > 127 });

ES6の良さ...

let hasMoreThanAscii = [...str].some(char => char.charCodeAt(0) > 127);
于 2012-11-23T03:40:31.157 に答える
22

この正規表現を試してください。スペースからチルダまで、文字列内で何らかの意味を持つすべての ASCII 文字をテストします。32126

var ascii = /^[ -~]+$/;

if ( !ascii.test( str ) ) {
  // string has non-ascii characters
}

編集:タブと改行を使用:

/^[ -~\t\n\r]+$/;
于 2012-11-23T03:49:38.883 に答える
10

charCodeAt文字列内の特定の位置にある文字コードを取得するために使用できます。

function isAsciiOnly(str) {
    for (var i = 0; i < str.length; i++)
        if (str.charCodeAt(i) > 127)
            return false;
    return true;
}
于 2012-11-23T03:40:38.157 に答える
0

@alexのソリューションのより簡単な代替:

const hasNonAsciiCharacters = str => /[^\u0000-\u007f]/.test(str);
于 2021-06-21T15:00:48.070 に答える