javascript:正则表达式的问题

javascript:正则表达式的问题,javascript,regex,Javascript,Regex,我试图用以下代码验证输入文本字段的值: function onBlurTexto(value) { var regexNIT = "([a-zA-z]|[0-9]|[&#,@.ÑñáéíóúÁÉÍÓÚ\|\s])"; regexCompilado = new RegExp(regexNIT); if (!(regexCompilado.test(value))) { alert("Wrong character in text :(");

我试图用以下代码验证输入文本字段的值:

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

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

这应该有效([a-zA-z]|[0-9]|[&#,@.ññáíúÁÍÓÚ|s])+$/g


演示:

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

这应该有效([a-zA-z]|[0-9]|[&#,@.ññáíúÁÍÓÚ|s])+$/g


演示:

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

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

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

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

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

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

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

var regexCompilado = new RegExp(regexNIT);

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

var regexCompilado = new RegExp(regexNIT);

我错过了什么。您有没有值的
regexpValidar
和没有使用的
regexNIT
。使用
if(/^[a-zA-Z0-9&#,@.ññáíóúÍÓ|s]+$/.test(value)){…
。请注意。如果允许使用空字符串,请将
+
替换为
*
。如果
|
用作OR运算符,只需将其从字符类中删除(因为它被视为文字管道字符)。请注意,在字符串文字中,所有反斜杠必须加倍以表示文字反斜杠
“\s”
=
“s”
在JS中,您可能指的是
A-Z
范围。返回true是因为它与单个字符6匹配,而不是因为!我错过了什么。您有没有值的
regexpValidar
和没有使用的
regexNIT
。使用
if(/^[a-zA-Z0-9&#,@.ññáíóúÍÓ|s]+$/.test(value)){…
。请注意。如果允许使用空字符串,请将
+
替换为
*
。如果
|
用作OR运算符,只需将其从字符类中删除(因为它被视为文字管道字符)。请注意,在字符串文字中,所有反斜杠必须加倍以表示文字反斜杠
“\s”
=
“s”
在JS中,您可能指的是
A-Z
范围。返回true是因为它与单个字符6匹配,而不是因为!这只匹配一个字符。即使提供了字符串
'65a'
,它也不会匹配。我不认为这是OP的意图。否则答案很好。@JohanWentholt谢谢,你是对的。更新的答案。这只匹配一个字符。即使提供了字符串
'65a'
,它也不会匹配。我不认为这是OP的意图。否则答案很好。@JohanWentholt谢谢,你是对的。更新的答案。谢谢@大家的友好回答!!!!我确信缺少了一些东西(开始(^)和结束($)标志)。现在我把这个regexp应用到工作中。谢谢大家的友好回答!!!!我确信缺少了一些东西(开始(^)和结束($)标志)。现在我让这个regexp工作了。谢谢Alexandros。与@TecBrat的评论相同。谢谢Alexandros。与@TecBrat的评论相同。