问题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;
}
下面选择的答案按照我最初的要求进行更换。谢谢大家的回答和帮助。
答案 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);