不知道为什么,但行为很奇怪。每当我在正则表达式中使用\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?
最佳答案
为什么不删除否定并将正则表达式更改为:
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
}
关于regex - 在 Flex 中匹配 not\u0000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317251/