3

不知道为什么,但行为很奇怪。每当我在正则表达式中使用 \u0000 时,它什么都不匹配。

var regexpNotWorking:RegExp = new RegExp("[^\u0000-\u0020]");
var regexpWorking:RegExp = new RegExp("[^\u0001-\u0020]");
var input:String = "I should be valid";
trace("not working: " + input.match(regexpNotWorking));
trace("working: " + input.match(regexpWorking));

输出是:

not working: null
working: I

任何人都知道为什么 \u0001 工作,但 \u0000 不是?

如何确保输入不包含 \u0000?

4

1 回答 1

1

为什么不删除否定并将正则表达式更改为:

var regexp:RegExp = /[\u0021-\uFFFF]/;

顺便说一句,不需要在 Flex 中使用新的 RegExp 或正则表达式引号。

但这可能不是您正在寻找的答案。这是查找字符串是否包含 NUL 字符的一种方法。

public function stringHasNul(value:String):Boolean {
    return (value.length != value.replace("\u0000", "NUL").length);
}

var hasNul:String = "ABC\u0000DEF"
var noNuls:String = "ABCDEF";

trace(hasNul.length); // should be 7
trace(hasNul.search("\u0000")); // wrongly gives 0, should be 3
trace(noNuls.length); // should be 6
trace(noNuls.search("\u0000"));  // wrongly gives 0, should be -1

trace(stringHasNul(hasNul)); // displays true
trace(stringHasNul(noNuls)); // display false

要检查是否有任何字符在 \u0000 到 \u0020 范围内,您可以这样做:

var regexp:RegExp = /[^\u0021-\uFFFF]/;

if (somestring.search(regexp) == -1)
{
    // somestring is valid do something with it
}
于 2013-01-17T02:40:09.893 回答