Подтвердить что ты не робот

JavaScript & regex: Как проверить, является ли только строка ASCII?

Я знаю, что могу проверять строку со словами (0-9 A-Z a-z и подчеркивание), применяя W в регулярном выражении следующим образом:

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

Но как проверить, содержит ли строка только символы ASCII? (Я думаю, что я рядом, но что я пропустил?)

Ссылка: qaru.site/info/442529/...

ОБНОВЛЕНИЕ. Для моего случая достаточно стандартного набора символов.

4b9b3361

Ответ 1

Все, что вам нужно сделать, это проверить, что символы находятся в правильном диапазоне символов.

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

Или, если вы хотите использовать расширенный набор символов ASCII:

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

Ответ 2

Для этого вам не нужен RegEx, просто проверьте, имеют ли все символы в этой строке код char между 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;
}

Ответ 3

Для ES2018, Regexp поддерживает экранирование свойств Unicode, вы можете использовать /[\p{ASCII}]+/u для сопоставления символов ASCII. Это очень ясно сейчас.

Поддерживаемые браузеры:

  • Хром 64+
  • Safari/JavaScriptКорпус начинается в Safari Technology Preview 42