【问题标题】:javascript : problem with regular expressionjavascript:正则表达式的问题
【发布时间】:2019-05-09 11:53:07
【问题描述】:

我正在尝试使用以下代码验证输入文本字段的值:

function onBlurTexto(value) {

    var regexNIT = "([a-zA-z]|[0-9]|[&#,@.ÑñáéíóúÁÉÍÓÚ\|\s])";

    regexCompilado = new RegExp(regexNIT);

    if (!(regexCompilado.test(value))) {
        alert("Wrong character in text :(");
        return false;
    } else {
        return true;
    }
}

但是当我输入这段文字时:

!65a

函数返回true(如您所见,正则表达式中不存在“!”字符)

我不是正则表达式方面的专家,所以我认为我在构建这个 reg.exp 时遗漏了一些东西。

我怎样才能使这个正则表达式起作用?

提前致谢。

编辑

我很抱歉......我应该在发布问题之前删除对变量“regexpValidar”的引用。我修改了样本。谢谢@TecBrat

【问题讨论】:

  • 我在这里错过了什么。你有没有价值的regexpValidar 和没有被使用的regexNIT
  • 使用if (/^[a-zA-Z0-9&#,@.ÑñáéíóúÁÉÍÓÚ|\s]+$/.test(value)) {...}。请注意[A-z] matches more than just letters。如果允许空字符串,请将@​​987654327@ 替换为*。如果 | 用作 OR 运算符,只需将其从字符类中删除(因为它被视为文字管道字符)。请注意,在字符串文字中,所有反斜杠必须加倍以表示文字反斜杠。 "\s" = "s" 在 JS 中
  • 你的意思可能是A-Z range。
  • 它返回 true 是因为它匹配单个字符 6,而不是因为 !

标签: javascript regex


【解决方案1】:

您应该为您的正则表达式提供开始 (^) 和结束 ($) 标志。现在您正在匹配 65a,因为您有备用集合。

这应该可以/^([a-zA-z]|[0-9]|[&#,@.ÑñáéíóúÁÉÍÓÚ\|\s])+$/g

演示:https://regex101.com/r/zo2MpN/3

【讨论】:

  • 这只匹配一个字符。即使提供了字符串'65a',它也不会匹配。我不认为那是OP的意图。否则很好的答案。
  • @JohanWentholt 谢谢,你是对的。更新了答案。
【解决方案2】:

RegExp.test 在字符串中查找匹配项,它不会验证整个字符串是否与正则表达式匹配。为了执行后者,您需要在您的正则表达式中添加开始和结束锚点(即在开始处添加“^”,在结尾处添加“$”,因此您有“^your regex here$”)。

我还刚刚注意到您的正则表达式当前只匹配一个字符。您可能希望在括号后添加一个“+”,以便它匹配一个或多个:

"^([a-zA-z]|[0-9]|[&#,@.ÑñáéíóúÁÉÍÓÚ\|\s])+$"

【讨论】:

  • 感谢@everybody 的热心回答!!!!我确信缺少某些东西(开始 (^) 和结束 ($) 标志)。现在我把这个正则表达式工作了。
【解决方案3】:

这是错误的。您使用的变量没有任何内容。试试这个吧。

var regexCompilado = new RegExp(regexNIT);

【讨论】:

  • 谢谢亚历山德罗斯。与@TecBrat 评论的相同。
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
相关资源
最近更新 更多