gpt4 book ai didi

javascript - 检测无效的 XML 字符 (javascript)

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:02 24 4
gpt4 key购买 nike

昨天我提出了一个关于Detect non valid XML characters in java的问题,并且此表达式按预期工作:

String xml10pattern = "[^"
+ "\u0009\r\n" // #x9 | #xA | #xD
+ "\u0020-\uD7FF" // [#x20-#xD7FF]
+ "\uE000-\uFFFD" // [#xE000-#xFFFD]
+ "\ud800\udc00-\udbff\udfff" // [#x10000-#x10FFFF]
+ "]";

然而,我意识到在客户端使用 javascript 检查无效字符会更好,但我没有成功。

我几乎达到了,除了范围 U+10000–U+10FFFF:http://jsfiddle.net/mymxyjaf/15/

最后一个范围,我试过了

 var rg = /[^\u0009\r\n\u0020-\uD7FF\uE000-\uFFFD\ud800\udc00-\udbff\udfff]/g; 

但它不起作用。在 regextester , 告诉“范围值反转”。我认为这是因为 \ud800\udc00-\udbff\udfff 被解释为 3 个表达式:

\ud800; \udc00-\udbff; \udfff  

当然,中间那个失败了。

所以,我的问题是如何将 java 正则表达式转换为 javascript。

谢谢。

====更新====

感谢@collapsar 的评论,我尝试制作两个正则表达式。
因此,我意识到我无法否定字符 [^...]
它会丢弃正确的字符,例如 U+10001。我的意思是,这是不对的:

function validateIllegalChars(str) {
var re1 = /[^\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD]/g;
var re2 = /[^[\uD800-\uDBFF][\uDC00-\uDFFF]]/g;
var str2 = str.replace(re1, '').replace(re2, ''); // First replace would remove all valid characters [#x10000-#x10FFFF]
alert('str2:' + str2);
if (str2 != str) return false;
return true;
}

然后,我尝试了下一个(http://jsfiddle.net/mymxyjaf/18/):

function valPos(str) { 
var re1 = /[\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD]/g;
var re2 = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;

var str2 = str.replace(re1, '').replace(re2, '');
if (str2.length === 0) return true;
alert('str2:' + str2 + '; length: ' + str2.length);
return false;
}

但是,当我调用此函数时:valPos('eo' + String.fromCharCode(65537)),其中 65537 是 U+10001 它返回 错误。出了什么问题或我该如何解决?

最佳答案

我终于解决了。

正如@collapsar 告诉我的,我自己的问题的答案可能是:

function validateIllegalChars(str) { 

var re1 = /[\u0009\u000A\u000D\u0020-\uD7FF\uE000-\uFFFD]/g; // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
var re2 = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; // [#x10000-#x10FFFF]

var res = str.replace(re1, '').replace(re2, ''); // Should remove any valid character

if (!!res && res.length > 0) { // any remaining characters, means input str is not valid
return false;
}

return true;
}

前面的示例(我在 jsfiddle 中发布的示例)对我不起作用,因为 String.fromCharCode(65537)不生成代码点为 U+10001 的字符,正如我所想,但是U+0001 .

感谢您的帮助。

关于javascript - 检测无效的 XML 字符 (javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29031792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com