正则表达式模式匹配问题

问题描述 投票:0回答:3

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

javascript regex
3个回答
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
投票

在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控制台中测试。


0
投票

我已经使用你应该做的正则表达式做了一个例子,我认为你构建正则表达式的方式并没有帮助。您不需要创建字符串然后创建新的正则表达式对象,您可以使用/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)">
© www.soinside.com 2019 - 2024. All rights reserved.