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

Rap*_*tor 24 javascript regex

我知道我可以通过应用这样W的正则表达式来验证字符串(0-9 AZ az和下划线):

function isValid(str) { return /^\w+$/.test(str); }
Run Code Online (Sandbox Code Playgroud)

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

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

更新:标准字符集足以满足我的需求.

zzz*_*Bov 75

您需要做的就是测试角色是否在正确的角色范围内.

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

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

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

  • 对于** printable ** ASCII:`const isPrintableASCII = string => / ^ [\ x20- \ x7F] * $ /。test(string);`。 (4认同)
  • @K_ 的正则表达式允许使用 DEL 字符;使用 `/^[\x20-\x7E]*$/` 来禁止它。 (2认同)

Dan*_*nte 12

您不需要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;
}
Run Code Online (Sandbox Code Playgroud)

  • "你不需要RegEx来做到这一点"---为什么不使用正则表达式 - 这将是一个简单的一个班轮 (7认同)
  • RegExp 也明显比这个版本快。这就像慢了 5 倍。 (3认同)

小智 5

对于 ES2018,Regexp 支持Unicode 属性转义,可以/[\p{ASCII}]+/u用来匹配 ASCII 字符。现在已经很清楚了。

支持的浏览器:

  • 铬 64+
  • 从 Safari Technology Preview 42 开始的 Safari/JavaScriptCore