2-舞伴;在Javascript中 - 检测特殊字符并用%替换所有*

时间:2012-02-08 20:51:31

标签: javascript regex replace character

问题1:我已尝试以下方法来检测字符(大写和小写),数字和*但我收到的错误是它不是有效的正则表达式。

var pattern = '?[a-zA-Z0-9*][a-zA-Z0-9*]*';

问题2:如何用正则表达式替换字符串中%字符的*字符的所有实例?我是一个正则表达式的菜鸟,到目前为止我所尝试的一切都在轰炸...... (回答)

编辑1& 2:澄清我的精神错乱。

编辑3:想提供我的最终解决方案:

这就是我最终的模式匹配:

var pattern = "^[a-zA-Z0-9*]*$";
var regEx = new RegExp(pattern);
if(regEx.test(searchText) === true) {
    return true;
}

下面选择的答案按照我最初的要求进行更换。谢谢大家的回答和帮助。

3 个答案:

答案 0 :(得分:5)

这个问题吓到我了,因为它表明你正在创建一个SQL injection漏洞,但答案是:

s = 'foo*bar*baz';
s = s.replace(/\*/g, '%');
// now s == 'foo%bar%baz'

答案 1 :(得分:2)

var newString = "foo*bar*baz".replace(/\*/g, "%");

g正则表达式标志表示“全局”或“全部为”em。

答案 2 :(得分:1)

回答“问题1”部分

首先,如果要定义要在其他地方使用的正则表达式模式,则使用斜杠/而不是引号"来完成,例如。

/?[a-zA-Z0-9*][a-zA-Z0-9*]*/

这是一个有效的正则表达式,因为“可选”?运算符需要在其左侧操作,就像*一样。删除它确实为您提供了有效的正则表达式。

var pattern = /[a-zA-Z0-9*][a-zA-Z0-9*]*/;

改进 - 由于您的两个字符类[a-zA-Z0-9*]完全相同,因此您无需重复它们,只需使用+运算符代替*

var pattern = /[a-zA-Z0-9*]+/;

而不是列出a-zA-Z,只需通过附加运算符i

来忽略大小写
var pattern = /[A-Z0-9*]+/i;

最后,如果你想测试输入完全匹配,你需要在开始和结束时锚定模式,否则.match()将找到模式,如果它出现在输入的任何地方。

var pattern = /^[A-Z0-9*]+$/i;
var input = "Foo*Bar*baz";
console.log("Got: " + input.match(pattern);