JavaScript&正则表达式:如何检查字符串是否仅为ASCII?

时间:2013-01-14 03:58:21

标签: javascript regex

我知道我可以通过在正则表达式中应用W来对字符串(0-9 A-Z a-z和下划线)进行验证:

function isValid(str) { return /^\w+$/.test(str); }

但是如何检查字符串是否只包含ASCII字符? (我想我很接近,但我错过了什么?)

参考:https://stackoverflow.com/a/8253200/188331

更新:标准字符集足以满足我的要求。

4 个答案:

答案 0 :(得分:69)

您只需要测试字符是否在正确的字符范围内。

function isASCII(str) {
    return /^[\x00-\x7F]*$/.test(str);
}

或者如果您想使用扩展的ASCII字符集:

function isASCII(str, extended) {
    return (extended ? /^[\x00-\xFF]*$/ : /^[\x00-\x7F]*$/).test(str);
}

答案 1 :(得分:11)

您不需要RegEx来执行此操作,只需检查该字符串中的所有字符是否都有0到127之间的字符代码:

function isValid(str){
    if(typeof(str)!=='string'){
        return false;
    }
    for(var i=0;i<str.length;i++){
        if(str.charCodeAt(i)>127){
            return false;
        }
    }
    return true;
}

答案 2 :(得分:1)

对于ES2018,Regexp支持Unicode property escapes,可以使用/[\p{ASCII}]+/u来匹配ASCII字符。现在很清楚。

支持的浏览器:

  • Chrome 64 +
  • 从Safari技术预览版42开始的Safari / JavaScriptCore

答案 3 :(得分:0)

var check = function(checkString) {

    var invalidCharsFound = false;

    for (var i = 0; i < checkString.length; i++) {
        var charValue = checkString.charCodeAt(i);

        /**
         * do not accept characters over 127
         **/

        if (charValue > 127) {
            invalidCharsFound = true;
            break;
        }
    }

    return invalidCharsFound;
};