39

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

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

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

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

更新:标准字符集对我来说就足够了。

4

4 回答 4

106

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

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

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

function isASCII(str, extended) {
    return (extended ? /^[\x00-\xFF]*$/ : /^[\x00-\x7F]*$/).test(str);
}
于 2013-01-14T04:04:15.637 回答
14

您不需要 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;
}
于 2013-01-14T04:02:44.317 回答
5

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

支持的浏览器:

  • 铬 64+
  • Safari/JavaScriptCore 从 Safari Technology Preview 42 开始
于 2019-01-11T07:02:29.780 回答
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;
};
于 2019-11-05T15:42:30.230 回答