【问题标题】:Regular Expression Pattern matching issue正则表达式模式匹配问题
【发布时间】:2018-10-25 02:39:22
【问题描述】:

在 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。任何帮助/建议都会有很大帮助。提前致谢。

【问题讨论】:

  • 我通常喜欢 DRY-ness,但 IMO 除非重复的模式是 long,否则不要尝试跨 多个单独的正则表达式。 (另请注意,您的字符集使用i 标志简化为[a-z\d]
  • 能否提供charValue的内容是什么?
  • 另外,您只需要检查您的角色是否为a 吗?为什么在这种情况下使用正则表达式?
  • @Nicolas 我将其编写为 java 脚本中按键验证的一部分,现在允许用户仅输入字母数字值。更新了我的帖子。
  • 只需使用RegExp构造函数correctly

标签: javascript regex


【解决方案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('@'))

【讨论】:

    【解决方案2】:

    在正则表达式中不必包含'/'

    new RegExp("^[0-9a-zA-Z]$").test('a')

    返回true

    new RegExp("^[0-9a-zA-Z]$").test('@')

    返回false

    那就这样吧

    var rex="^[0-9a-zA-Z]$"

    您可以在任何地方使用它。在 Chrome 控制台中测试。

    【讨论】:

      【解决方案3】:

      我已经使用您的正则表达式做了一个示例,说明它应该做什么,我认为您构建正则表达式的方式没有帮助。你不需要创建一个字符串然后创建一个新的正则表达式对象,你可以使用/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)">

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-17
        • 2011-03-09
        • 1970-01-01
        • 2017-09-21
        • 1970-01-01
        相关资源
        最近更新 更多