我知道我可以通过在正则表达式中应用W
来对字符串(0-9 A-Z a-z和下划线)进行验证:
function isValid(str) { return /^\w+$/.test(str); }
但是如何检查字符串是否只包含ASCII字符? (我想我很接近,但我错过了什么?)
参考:https://stackoverflow.com/a/8253200/188331
更新:标准字符集足以满足我的要求。
答案 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字符。现在很清楚。
支持的浏览器:
答案 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;
};