在RegEx方面经验不足。
我在Java脚本中具有以下功能,效果很好。
使用以下模式仅允许字母数字
var valid = /^[A-Za-z0-9]+$/.test("a"); // returns true
var valid = /^[A-Za-z0-9]+$/.test("@"); // returns false
我在代码的其他位置使用了模式部分“ ^ [A-Za-z0-9]”,并被要求在变量中使用部分“ ^ [A-Za-z0-9]”并使用它,使其不重复。以下是对上述内容的修改:
var regExPart= "^[A-Za-z0-9]";
var regExString = ("/" + regExPart+ "+$/".replace(/\"/g, "")); // replacing the quotes
var regExp = new RegExp(regExString); // results in /^[A-Za-z0-9]+$/
var valid = regExp.test(charValue); // charValue could be any keyvalue "a" or "@"
//the above returns false for "a"
//the above returns false for "@"
我正在按键事件中编写此代码,以仅允许使用字母数字
keypressValidation: function (e) {
var charCode = (e.which) ? e.which: event.keyCode;
var charValue = String.fromCharCode(charCode);
var valid = return /^[A-Za-z0-9]+$/.test(charValue);
if (!valid)
{
//prevent default (don't allow/ enter the value)
}
不知道为什么。我在此缺少什么。两种方法都需要对“ a”返回true,对“ @”返回false。任何帮助/建议都将大有帮助。预先感谢。
答案 0 :(得分:1)
对于RegExp
类构造函数,不需要指定正斜杠/
。
var regExPart= "^[A-Za-z0-9]";
var regExp = new RegExp(regExPart + "+$"); // results in /^[A-Za-z0-9]+$/
console.log('a', regExp.test('a'))
console.log('@', regExp.test('@'))
答案 1 :(得分:1)
不是必须在正则表达式中包含'/'
new RegExp("^[0-9a-zA-Z]$").test('a')
返回true
new RegExp("^[0-9a-zA-Z]$").test('@')
返回false
所以
var rex="^[0-9a-zA-Z]$"
您可以在任何地方使用它。在Chrome控制台中进行了测试。
答案 2 :(得分:0)
我已经使用您的正则表达式做了一个例子,我认为您构建正则表达式的方式无济于事。您不需要先创建一个字符串,然后再创建一个新的regex对象,就可以使用/regex part/
。
无论如何,这是一个可行的示例。
function keypress(e) {
// Get the current typed key
var keynum = e.key;
// this regex only allow character between a and z and 0 and 9
var regex = /^[a-zA-Z0-9]+$/;
// we check if the current key matches our regex
if(!keynum.match(regex) ) {
// it doesn't ? well we stop the event from happening
e.preventDefault();
}
}
<input type="text" onkeypress="keypress(event)">