如何修复:@在perl脚本的正则表达式中解释为数组

时间:2014-05-19 13:25:21

标签: javascript html regex perl cgi

我的perl文档中有以下java脚本函数:

function emailcheck()
{
  var emailoutline = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
  var x = document.ec.email.value;
  if (emailoutline.test(x))
  {
    alert("valid email");  
  }
}

是一部分       打印HTML 阻止所以我认为它应该工作正常。如果我在perl文档之外使用它,html部分工作正常,但是一旦我将它链接到那里,它就不再起作用了。 " @"在正则表达式中也标记为绿色,而脚本的所有其余html部分都标记为红色 - 我认为问题在于" @"由perl解释为数组的开头。有没有人知道如何解决这个问题?

这是整个代码:

#!/usr/bin/perl
use strict;
use warnings;

print "Content-type: text/html\n\n";
print <<'HTML';
<html>
<head>
<title>Mailcheck</title>
</head>
<body>
  <form name="ec" action ="">
  Email: <input type="text" name="email"> <br>
  <input type="button" value="Pruefen" onclick="javascript:emailcheck();">
  </form>
  <script language="javascript" type="text/javascript">
  function emailcheck()
  {
    var emailoutline = /^[a-z0-9._%+-]+\@[a-z0-9.-]+\.[a-z]{2,4}$/;
    var x = document.ec.email.value;
    if (emailoutline.test(x))
    {
      alert("This is a valid eMail");  
    }
    else
    {
      alert("This is not a valid eMail");
    }
  }
  </script>
 </body>
HTML
exit; 

3 个答案:

答案 0 :(得分:2)

我自己解决了这个问题:

我不得不像这样重写正则表达式:

var emailoutline = /^[a-z0-9._%+-]+\@[a-z0-9.-]+\.[a-z]{2,4}\$\/\;

因为perl cut of the reserved symbols&#34; $&#34;和&#34; /&#34;。现在代码工作正常 - 只是想发布解决方案,如果其他人遇到同样的问题。感谢您提供的所有帮助:)

答案 1 :(得分:1)

在Perl中,@是保留字符。您需要将其转义(\@)以避免被解释为数组符号。

答案 2 :(得分:0)

使用非插值打印来防止Perl尝试扩展变量:

print <<'HTML';
...
HTML