2

我有一行代码从 c# 代码中获取正则表达式

 $("#but").keyup(function () 
 {

     var regex = /<%:StringKeeper.InfoRegex.ToString()%>/;
     var info = $("#Info").val(); // info from edit-field
     var matches = regex.exec(info);

     var part1 = matches[1];
     var part2 = matches[2];

          if (matches != null)
              {
                 if (part1.length != 6 && part2.length != 5 || 
                    (part1 == '000000' || part2 == '00000'))
                     {
                        showWarning = true;
                     }
              }
           else  { showWarning = true; }

 if (showWarning) 
 {
 $("#butWarning").show();
 $("#submitButton").attr('disabled', 'disabled');
 });

$("#but").keyup();

问题是视觉工作室没有意识到“;” 在第一行的末尾没有评论。因此,即使代码仍然有效,它也会在下一行代码上发出警告。

编辑:代码现在显示了完整的功能,因为人们想要更多信息。基本上,如果在某个输入字段的按键事件中,检查正则表达式以查看输入是否与我的正则表达式匹配,如果不是我会抛出警告。

        public static Regex InfoRegex
    {
        get
        {
            return new Regex(@"^[Xx][Yy]0(\d{6})(\d{5})$");
        }
    }

有谁知道如何解决这个问题或我想使用的新语法是什么?

4

2 回答 2

1

试试这个,但是你应该在 aspx 或 ascx 文件中尝试,而不是 js 文件。

var regex = /<%=StringKeeper.InfoRegex.ToString()%>/;

于 2013-01-30T23:34:51.917 回答
1

Intellisense 无法处理 .js 和 C# 和 HTML 的所有可能组合。我不时注意到这一点,然后我想知道他们是如何让它发挥作用的。

如果 InfoRegex 是 string.Empty,您的代码实际上会生成 JS 注释:

 var regex = /<%:StringKeeper.InfoRegex.ToString()%>/;

(这让我想起了 C 谜题

int *p, *q;
int a = *p/*q;

)

将您的原始行更改为

 var regex = /<%:StringKeeper.InfoRegex.ToString()%>/; /*
             /dummy-expression-for-IDE/;   /*           */

在 IDE 模式下,计算的 RegEx 被视为注释,因此忽略多行 begin-comment。案例 2 的 end-comment 需要第二个 begin-comment:

在编译模式下,使用计算的 RegEx,多行注释从第 1 行开始。

于 2013-01-31T00:16:37.410 回答