正则表达式模式匹配问题

时间:2018-10-25 02:39:22

标签: javascript regex

在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。任何帮助/建议都将大有帮助。预先感谢。

3 个答案:

答案 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)">