我正在尝试测试字符串是否包含代码点0x7f
上方的至少一个(unicode)字符(即非ascii字符)。
我尝试了以下想法(以及其他一些想法),但它们似乎不起作用:
var rx:RegExp;
rx = /[^\\x00-\\x7f]/; // negate ascii code point 0 to 127
trace( rx.test( '\u0080' ) ); // true (expected true)
trace( rx.test( 'b' ) ); // true (expected false)
rx = /[^\u0000-\u007f]/; // negate unicode code point 0 to 127
trace( rx.test( '\u0080' ) ); // false (expected true)
trace( rx.test( 'b' ) ); // false (expected false)
有人可以帮助我理解为什么这不能正常工作以及如何正确地完成它?
答案 0 :(得分:1)
/[^\\x00-\\x7f]/;
双反斜杠表示字面反斜杠,因此您正在寻找一个排除反斜杠的字符组,x
,0
,0
和反斜杠之间的所有字符,{{ 1}},x
和7
。
如果正则表达式是字符串文字(如f
),则只能使用双反斜杠;几乎所有正则表达式文字语法new RegExp('[^\\x00-\\x7F]')
的目的是允许你输入反斜杠表达式,而不需要额外的转义层。
/.../
然而:
'foo'.search(/[^\x00-\x7F]/)!==-1 // false
'bär'.search(/[^\x00-\x7F]/)!==-1 // true
浏览器JavaScript中的 rx = /[^\u0000-\u007f]/; // negate unicode code point 0 to 127
trace( rx.test( '\u0080' ) ); // false (expected true)
。如果不是在ActionScript中似乎是非符合ECMA的错误。
答案 1 :(得分:0)
我不确定AS3是否支持unicode RegExp,例如Python。 我可以建议以下解决方案,这将有助于你做你想做的事情,但我确信它对于长串很慢。
function containsUnicode(text:String):Boolean
{
for (var i:int = text.length - 1; i >= 0; i--)
{
if (text.charCodeAt(i) > 127)
return true;
}
return false;
}