正则表达式去除撇号

3

我有一段包含单引号的文本,例如"Frank's Reel Movie Reviews"

如何去掉这个单引号?

我尝试过:

.replace (/\'/ig, '');
.replace ('\'', '');

但似乎这个 ' 符号不想被删除...

我想这个 ' 可能是以 utf-8 或其他编码方式进行编码的。

有什么想法吗?


你确定这是一个 ' 而不是 MS Word 使用的弯曲符号? - Javier
3
请确认您这么做不是为了用这段文本编写SQL命令。 - Andrew
呵呵呵呵,是的,那正是我想要做的。 - Gerald Ferreira
1
等等,你是认真的吗?你正在尝试构建一个SQL命令?停下来!去研究如何正确地使用参数化查询来完成这个任务! - Peter Boughton
1
如果您将此用于 SQL 命令,请一定使用参数化 SQL 查询。否则,您会使自己容易受到巨大的 SQL 注入攻击。 - Paul van Brenk
显示剩余5条评论
7个回答

6
这是一个晚回复,但总结答案需要质量高的代码来解决不同方法的问题。
在检测撇号时,您无需使用转义序列。正确的正则表达式应该是:
/'+/g

如果正则表达式中出现了像'或''或'''等的词,这将从正则表达式中删除所有撇号。

下面是一个代码片段,它只从字符串中删除一个撇号。

JavasScript

var name = document.getElementById('name').value;
name = name.replace(/'/,'')
alert('The result string ' + name);

PHP

$subject ="Mik's sub";
$resplace = "";
$search ="'";
$new_str =  str_replace($search, $replace, $subject);
echo "New Subject : $new_str";

使用JavaScript处理Unicode

var regex = /\u0027/;
name = name.replace(regex,'')

6
正则表达式[^\w ]将匹配所有非字母数字和空格的内容。您可以使用它来确保删除所有撇号/引号/等,即使是用Unicode完成的-尽管问题中没有足够的信息来确定是否可接受这样做。

我需要在字符串中添加一些特殊字符,例如#,//等等... 我只是需要消除那个烦人的'。 - Gerald Ferreira
1
然后,您可以将特殊字符添加到类中 - 例如 [^\w #/] - 但更重要的是,在问题中提供更多详细信息,说明您正在尝试做什么以及使用的语言是什么! - Peter Boughton
哈哈哈 - 以为会在几分钟内得到答案 - 感谢你,彼得,万分感谢 - 我刚学到了新东西!!! - Gerald Ferreira
没问题。不过我仍然建议使用适当的参数化查询——除了更安全之外,它还可以提高性能。 - Peter Boughton
<<< 我现在已经了解到,撇号实际上被编码为 ' - 并使用此代码 (/&#39;/ig,"")。 - Gerald Ferreira

2

假设您正在使用Java,您是否尝试过.replaceAll("'", "")?这对我有效。


我已经尝试过Brabster,所以我认为它是某种编码,因为我无法将其杀死。 - Gerald Ferreira
你提供的示例中引号被转义了,这就是我建议这样做的原因。我想我可以将字符串转换为十六进制并将其与一些字符代码表进行比较。如果没有更多关于字符串来自何处的上下文信息,这会变得棘手。 - brabster

1

单引号不需要转义。尝试将其裸露地留下,不要加反斜杠。


var stripped31 = htstring31.replace("'", ""); <<< 我已经尝试过了,但它仍然卡住。 - Gerald Ferreira
这在Javascript中确实有效。代码 --> input = input.replace(/'/,'') - TheTechGuy
同样适用于PHP $new_str = str_replace("'", $replace, $subject); - TheTechGuy

0

如果您只想在结果中保留字母和空格,您可以始终匹配任何不是这些字符的字符,例如...

.replace (/[^a-zA-Z ]+/ig, '');

当然,你也可以添加任何其他字符到正则表达式中。


0
如果你想要选择性地移除(或者替换为空格等其他字符)撇号,但不包括作为英尺单位的符号',可以使用以下代码:
val apostropheRegex = """(?<=[a-zA-Z])'(?=[a-zA-Z])"""
"john's carpet is 5' x 8'".replaceAll(apostropheRegex, "XXX") // johnXXXs carpet is 5' x 8'

它的意思是“替换所有在两个字母之间的符号 ' ”。


0

单引号不是元字符,无需转义。


艾伦,要么我转义单引号,要么我没有数据库,有时候我们需要做一些不常规的事情来让我们想要的东西工作。 - Gerald Ferreira
嗨艾伦,抱歉现在我才明白你的意思,它不是一个元字符,所以不需要转义!- 感谢你的建议 - Gerald Ferreira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接