从字符串中删除所有特殊字符的最佳方法是什么 - 如下所示:
!@#$%^&安培; *(){} |:“><,/;'[] \ = -
?。删除这些字符的项目会相当短,那么在每个项目上使用REGEX或仅使用字符串操作会更好吗?
THX
环境== C#/。NET
答案 0 :(得分:6)
拥有白名单通常比黑名单更好。
正则表达式有一个方便的\w
,实际上意味着字母数字加上下划线(某些变体还会在列表中添加重音字符(á,é,ô等),其他变体不会)。
您可以使用\W
来表示不是字母数字的所有内容。
所以用空字符串替换\W
会删除所有“特殊”字符。
或者,如果您确实需要一组不同的字母数字字符,则可以使用否定的字符类:[^abc]
将匹配不是a
或b
或{{ 1}},c
将匹配范围[^a-z]
相当于a,b,c,d...x,y,z
为\w
,因此[A-Za-z0-9_]
为\W
答案 1 :(得分:3)
在php中:
$tests = array(
'hello, world!'
,'this is a test'
,'and so is this'
,'another test with /slashes/ & (parenthesis)'
,'l3375p34k stinks'
);
function strip_non_alphanumerics( $subject )
{
return preg_replace( '/[^a-z0-9]/i', '', $subject );
}
foreach( $tests as $test )
{
printf( "%s\n", strip_non_alphanumerics( $test ) );
}
输出将是:
helloworld
thisisatest
andsoisthis
anothertestwithslashesparenthesis
l3375p34kstinks
答案 2 :(得分:2)
我更喜欢正则表达式,因为语法更易于阅读和维护:
# in Python
import re
re.sub("[abcdef]", "", text)
其中abcdef
是要删除的正确转义的字符。
或者,如果您只想要字母数字字符(加上下划线),您可以使用:
re.sub("\W", "", text)
其中\W
代表非单词字符,即[^a-zA-Z_0-9]
。
答案 3 :(得分:1)
如果您只想使用字母数字字符,可以使用倒置字符类来表达:
[^A-Za-z0-9]+
这意味着:每个不是字母数字的字符。
答案 4 :(得分:1)
这是一个简单的正则表达式
[^\w]
这应该捕获所有非单词字符,这将允许az AZ 0-9空格,_既不是空格也不是_在你的列表中,所以如果你想要捕捉这些也有效,那么我会做这样的事情:
/[a-z0-90/i
这是a-z和0-9的PHP格式,i使其不区分大小写。
答案 5 :(得分:0)
使用“tr”命令?
你没有说你在做什么环境......贝壳? C程序? Java的?每个都有不同的最佳解决方案。
答案 6 :(得分:0)
你用什么语言写正则表达式?
例如,在Perl中,您可以进行翻译,将列表中的任何字符转换为空白:
e.g。这会将'a','b','c'或'd'翻译成''
$sentence =~ tr/abcd//;
答案 7 :(得分:0)
您可以通过获取键入字符的askey值来在前端验证它们。
答案 8 :(得分:0)
PHP中的理想方法是......
$text = "ABCDEF...Á123";
$text = preg_replace( '/[^\p{L}]/i', '', $text);
print($text); # Output: ABCDEFÁ
或者,在Perl ......
my $text = "ABCDEF...Á123";
$text =~ s/[^\p{L}]//gi;
print($text); # Output: ABCDEFÁ
如果您只是在[^ a-zA-Z]上匹配,您将会错过所有重音字符,这些(大多数情况下),我想您会想要保留。