在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。任何帮助/建议都会有很大帮助。预先感谢。
对于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('@'))
在regexp中包含'/'不是必须的
new RegExp("^[0-9a-zA-Z]$").test('a')
返回true
new RegExp("^[0-9a-zA-Z]$").test('@')
返回false
所以就这么做
var rex="^[0-9a-zA-Z]$"
你可以在任何地方使用它。在Chrome控制台中测试。
我已经使用你应该做的正则表达式做了一个例子,我认为你构建正则表达式的方式并没有帮助。您不需要创建字符串然后创建新的正则表达式对象,您可以使用/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)">