首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全打印(例如避免终端控制序列)

安全打印(例如避免终端控制序列)
EN

Stack Overflow用户
提问于 2014-08-25 11:39:16
回答 3查看 88关注 0票数 0

印刷或印刷前如何消毒?

我想删除所有的终端控制序列和其他潜在的风险序列。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-25 19:04:34

也许您可以指定要保留的字符,而不是专注于要删除的内容。以下是删除任何非单词字符、间距或标点符号的正则表达式:

代码语言:javascript
复制
s/[^\w\s[:punct:]]+//g;

下面演示了几行示例。它使用Data::Dump方便地显示字符串的内部:

代码语言:javascript
复制
use strict;
use warnings;

use Data::Dump qw(dump);

my @data = (
    "Hello World\t\r\n\e\x00\x01\x02\x03\x04\x0b",
    'Testing Punctuation - `~!@#$%^&*()_+-={}|[]\:";\'<>?,./'
);

for (@data) {
    print "   Orig: " . dump($_) . "\n";
    s/[^\w\s[:punct:]]+//g;
    print "Cleaned: " . dump($_) . "\n\n";
}

产出:

代码语言:javascript
复制
   Orig: "Hello World\t\r\n\e\0\1\2\3\4\13"
Cleaned: "Hello World\t\r\n"

   Orig: "Testing Punctuation - `~!\@#\$%^&*()_+-={}|[]\\:\";'<>?,./"
Cleaned: "Testing Punctuation - `~!\@#\$%^&*()_+-={}|[]\\:\";'<>?,./"
票数 1
EN

Stack Overflow用户

发布于 2014-08-25 12:33:33

翻译可以是:

代码语言:javascript
复制
$str =~ tr/\x00-\x08\x0B-\x1F\x7F//;

这是ASCII控制字符,不包括选项卡和行提要。

票数 0
EN

Stack Overflow用户

发布于 2014-08-25 16:02:44

根据您的需要,这种方法可能有效:它删除了所有非字母、数字或空白的内容:

代码语言:javascript
复制
my $junk  = "\t\r\n\e  hello\x00\x01\x02\x03\x04\x0b";

print length($junk), "\n";  # 17
$junk =~ s/[^\w\s]//g;
print length($junk), "\n\n";  # 10

my $junk2 = "\x00\x01\x02\x03\x04\x0b";

print length($junk2), "\n";  # 6
$junk2 =~ s/[^\w\s]//g;
print length($junk2), "\n";  # 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25485073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档