保存前用下划线替换无效字符

时间:2013-03-28 17:07:36

标签: regex vbscript regex-negation

我可以使用this regex

^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\"";|/]+$

在VBscript中检测无效的Windows文件名,并在保存之前拒绝它们。我想通过使用标准字符(如下划线“_”)自动替换任何无效字符(或其继承)来为我的用户添加其他服务。

因此,我需要提出另一种模式,因为据我所知,VBscript只提供了一种方法,如果模式匹配则替换:

with getRGX()
    .ignoreCase = TRUE
    .global = TRUE
    .pattern = < inputPattern >
    < outputCleanfileName > = .Replace( < inputDirtyFileName >, < "_" > )
end with

到目前为止,我设法提出的最好成绩如下:

((PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?)?[\\?*:\"";|/]+

不幸的是,它与扩展相混淆:

INPUT    = COM1:aAZB?":a|a|a/.txt?
MATCH    = COM1:?"||/.txt?
EXPECTED = COM1:?"||/?

如果我遗漏了一些明显的东西,我会提前道歉,并感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为这个正则表达式符合你的要求:

(?:^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(?:\.(?=.)|$)|(?:([\x00-\x1f\\?*:\"";|/])))

您可以在Debuggex上查看其工作原理。我们的想法是&#34;反转&#34;拒绝正则表达式的每一部分。