从字符串中删除所有特殊字符的最佳方法是什么 - 如下所示:
!@#$%^&*(){}|:"?><,./;'[]\=-
删除了这些字符的项目会很短,那么在每个项目上使用 REGEX 还是只使用字符串操作会更好吗?
谢谢
环境 == C#/.NET
拥有白名单通常比拥有黑名单更好。
正则表达式有一个方便\w
的方式,有效地表示字母数字加下划线(某些变体还会在列表中添加重音字符(á、é、ô 等),而其他变体则不会)。
您可以通过使用\W
to 表示非字母数字的所有内容来反转它。
所以用空字符串替换将删除所有“特殊”字符。\W
或者,如果您确实需要一组与字母数字不同的字符,您可以使用否定字符类:[^abc]
将匹配不是a
orb
的所有内容c
,[^a-z]
并将匹配不在范围内的所有内容a,b,c,d...x,y,z
等价于\w
is[A-Za-z0-9_]
和因此\W
是[^A-Za-z0-9_]
在 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
我更喜欢正则表达式,因为语法更易于阅读和维护:
# in Python
import re
re.sub("[abcdef]", "", text)
要删除abcdef
的正确转义字符在哪里。
或者,如果您只想要字母数字字符(加上下划线),您可以使用:
re.sub("\W", "", text)
其中\W
表示一个非单词字符,即[^a-zA-Z_0-9]
。
当您只想拥有字母数字字符时,您可以通过使用反转字符类来表达这一点:
[^A-Za-z0-9]+
这意味着:每个不是字母数字的字符。
这是一个简单的正则表达式
[^\w]
这应该捕获所有非单词字符这将允许 az AZ 0-9 空格和 _ 既不是空格也不是 _ 不在您的列表中,所以如果您也想捕获这些,这可以工作,那么我会做这样的事情:
/[a-z0-90/i
这是 az 和 0-9 的 PHP 格式,i 使其不区分大小写。
我们使用“tr”命令?
你不说你在什么环境......壳?C程序?爪哇?每一个都有不同的最佳解决方案。
你用什么语言做正则表达式?
例如,在 Perl 中,您可以进行翻译,将列表中的任何字符翻译为空:
例如,这会将 'a'、'b'、'c' 或 'd' 翻译成 ''
$sentence =~ tr/abcd//;
您可以通过获取键入字符的 askey 值在前端验证它们。
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] 上匹配,你会错过所有重音字符,我想你会想要保留这些字符(大部分情况下)。