Javascript - 替换实现?

时间:2010-09-20 15:14:39

标签: javascript string

我必须检查字符串客户端。如果它只包含“\”(1,2或1000次),我需要拒绝它。代码(你的一些建议不幸地不起作用):

value.replace(/\\/g, '');
if(value=="") alert("NO"); else alert("YES");

所以:

value="\" = NO
value="\hello \people" = YES
value="\\\\hello \\people" = YES
value="hello \\people" = YES
value="hello people\" = YES
value="\\" = NO
value="\\\\\\" = NO
value="\\ \\\\ \ \\\" = NO

3 个答案:

答案 0 :(得分:3)

如果字符串有实际的单个反斜杠(例如,除了示例中的转义字符\a\F之外没有反斜杠),那么你将要去有一段艰难的时期,但如果他们被妥善逃脱,你可以简单地做:

str = str.replace( /\\/g, '' )

删除它们。

答案 1 :(得分:2)

正如Yi Jiang所说,唯一的可靠方法是使用服务器端代码。当然,现在你可以使用JavaScript服务器端(我经常这样做)。

答案是:

updatedString = originalString.replace(/\\/g, '');

...这是一个全局替换所有反斜杠的RegExp。

有些实现需要您这样做:

var re = /\\/g;
re.lastIndex = 0;
updatedString = originalString.replace(re, '');

...或者第二次替换可能无法正常工作。 (是的,真的,是的,我知道这似乎是错的。)实际上,不,对不起 - 如果你一直循环到结束,你只需要重置字符串(即使看起来RegEx应该超出范围,这是奇怪的一点)。由于replace到达字符串的末尾,你没问题。

答案 2 :(得分:0)

在Javascript中:

myvar=myvar.replace(/\\/g,'');

在PHP中:

$myvar=str_replace('\\','',$myvar);

请注意,它们都应该被赋予双反斜杠,因为它是一个转义字符。

在Javascript中这样做很好,但是如果你想确定的话,你也必须在服务器端做这件事,因为浏览器用户如果想要绕过你的验证就可以禁用javascript。 (你没有在这里指定一个服务器端语言,但我之前就已经考虑过PHP了。)

您没有说明您不希望它到达您的数据库的原因?如果你试图阻止黑客入侵,你需要做的不仅仅是因为它不仅仅是可以造成伤害的反斜杠。