Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个正则表达式在javascript函数之外工作,而不是在javascript函数内部工作?_Javascript_Regex_Email_Validation_Undefined - Fatal编程技术网

为什么这个正则表达式在javascript函数之外工作,而不是在javascript函数内部工作?

为什么这个正则表达式在javascript函数之外工作,而不是在javascript函数内部工作?,javascript,regex,email,validation,undefined,Javascript,Regex,Email,Validation,Undefined,好吧,我对regexps基本上是新手,更不用说Javascript了。 我正在尝试一个表单验证项目,我发现了一个网站,在那里他们有一个有用的示例regexp列表,其中有一些用于电子邮件验证,这就是我目前正在尝试的。 无论如何,在w3schools上使用这个表单验证示例,我能够使用他们的示例使其正常工作,并且regexp在javascript函数外部工作,但是由于某种原因,当我在函数内部调用它时,它返回一个未定义的值。 这是我的密码: <html> <head>

好吧,我对regexps基本上是新手,更不用说Javascript了。
我正在尝试一个表单验证项目,我发现了一个网站,在那里他们有一个有用的示例regexp列表,其中有一些用于电子邮件验证,这就是我目前正在尝试的。
无论如何,在w3schools上使用这个表单验证示例,我能够使用他们的示例使其正常工作,并且regexp在javascript函数外部工作,但是由于某种原因,当我在函数内部调用它时,它返回一个未定义的值。
这是我的密码:

<html>
  <head>
    <title>formzz validate-jons</title>
      <script type="text/javascript">
        pattern = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");

        function valid8email(field, txt)
        {
          with(field)
          {
            //at_pos = value.indexOf('@');
            //dot_pos = value.lastIndexOf('.');

            if(!pattern.test(value)) //at_pos < 1 || (dot_pos - at_pos) < 2)
            {
              alert(txt);
              return false;
            }
            else
            {
              return true;
            }
          }
        }

        function valid8(form)
        {
          with(form)
          {
            if(valid8email(email, "you must enter an email address") == false)
            {
              email.focus();
              return false;
            }
          }
        }
      </script>
    </head>
    <body>
      <form action="#" method="POST" onsubmit="return valid8(this)">

        Email: <input type="text" name="email" size="30" />
        <input type="submit" value="clicky-click" />

    </form>

    <script type="text/javascript">
      alert(pattern.test(""));
    </script>
  </body>
</html>

formzz验证jons
模式=新的正则表达式(“^[0-9a-zA-Z]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$”;
函数valid8email(字段,txt)
{
带(字段)
{
//at_pos=value.indexOf('@');
//dot_pos=value.lastIndexOf('.');
如果(!pattern.test(value))//at|pos<1 | |(dot|pos-at|pos)<2)
{
警报(txt);
返回false;
}
其他的
{
返回true;
}
}
}
功能有效8(表格)
{
附(表格)
{
if(valid8email(email,“您必须输入电子邮件地址”)==false)
{
email.focus();
返回false;
}
}
}
电邮:
警报(模式测试(“”);
好的。。。因此,正文中脚本标记中的警报工作正常

我在javascript函数内部做了大量测试,并检查了各种情况:

  • “值”的类型是字符串
  • 在javascript内部调用时,该函数返回“undefined”
  • 正则表达式本身工作正常,因为当在下面的脚本标记中输入正确的格式时,它将返回true
    那么问题会是什么呢?我很困惑。

    问题是
    模式
    指的是
    字段。模式
    (),因为您在
    with()
    中使用它,这是一个字符串,而不是您的正则表达式。如果您将其命名为类似于
    pattern1

    也就是说,首先不要将
    一起使用,这样就不会出现以下问题:)


    带有的非版本如下所示:

    var pattern = new RegExp("^[0-9a-zA-Z]+@[0-9a-zA-z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
    
    function valid8email(field, txt) {
        if (!pattern.test(field.value))
        {
            alert(txt);
            return false;
        }
        else {
            return true;
        }
    }
    
    function valid8(form) {
        if (valid8email(form.email, "you must enter an email address") == false) {
            form.email.focus();
            return false;
        }
    }
    

    除了狗,书是人最好的朋友;在狗的身体里,光线太暗,根本无法阅读。
    with
    是邪恶的。不要用它,那是一个糟糕的正则表达式;停止使用那个网站+1对于这个问题,还没有看到任何人在使用
    模式
    属性时遇到问题:)来说明为什么这是一个糟糕的正则表达式:这里有一个类似于我使用的地址,它不会匹配:
    myemail+yoursite@example.com
    。或
    myemail@some.subdomain.example.com
    。或者很多很多其他的。正则表达式是验证电子邮件地址的错误工具;为了验证它们,这仍然不是完全正确的(尽管基本上是正确的),说明了为什么。为什么要使用
    new RegExp
    而不是文字?@Marcel-我没有从OP的代码中更改它…我的目的是指出问题所在以及原因(HTML5属性与
    with
    块组合),不重新编写代码:)