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 字符,从空格32到波浪号126

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 回答