Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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正则表达式转换为c#正则表达式_Javascript_C#_Regex - Fatal编程技术网

将邮政信箱javascript正则表达式转换为c#正则表达式

将邮政信箱javascript正则表达式转换为c#正则表达式,javascript,c#,regex,Javascript,C#,Regex,我在一篇堆栈溢出文章中看到了以下javascript正则表达式,我想将其转换为C#: 我已经尝试删除了开头和结尾处的/,我相信它是用来表示字符串文字的,我还删除了结尾处的/I,它似乎不区分大小写,但我仍然缺少其他转换 原始的stack overflow文章如下: 有人能告诉我我还缺什么吗?不太熟悉正则表达式,我在这里有点挣扎 编辑: 以下是修改后的c#代码以及上述注释: public const string PoBoxRegex = @"^ *((#\d+)|((box|bin)[-. \/

我在一篇堆栈溢出文章中看到了以下javascript正则表达式,我想将其转换为C#:

我已经尝试删除了开头和结尾处的/,我相信它是用来表示字符串文字的,我还删除了结尾处的/I,它似乎不区分大小写,但我仍然缺少其他转换

原始的stack overflow文章如下:

有人能告诉我我还缺什么吗?不太熟悉正则表达式,我在这里有点挣扎

编辑: 以下是修改后的c#代码以及上述注释:

public const string PoBoxRegex = @"^ *((#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)";

public static bool IsPoBox(string addressToCheck)
{
    if (string.IsNullOrWhiteSpace(addressToCheck))
    {
        return false;
    }

    if (Regex.IsMatch(addressToCheck, PoBoxRegex, RegexOptions.IgnoreCase))
    {
        return true;
    }

    return false;
}

因为有一个
/i
修饰符,所以需要使用
RegexOptions.IgnoreCase
。所有
\/
都应写成
/
,因为正斜杠不是特殊的正则表达式字符,也不是正则表达式分隔符(这些在C#regex中不存在)。在将JS正则表达式文本转换为C#模式时,还需要使用逐字字符串文本(即
@“pattern”
)形式

所以,使用

[代码>字符串PoBoxRegex<代码>字符串PoBoxRegex=“以下以下以下代码>字符串poboboxregex=“以下以下代码>以下以下代码>字符串poboboxregregex=“以下以下以下以下以下以下以下以下以下代码:::((我)我)以下::((i)我)以下::((i)我)以下以下::(((d)d+));(((盒(本)本)月)本(本)月)日)本(本)月)日)))))(((((((((本)本)本)若若(本)本)若若(本)本)日)若(本)日)日)若若若(本)日)若(本)本)若若若(本)日)日)本)若(本)本)若若若(本)若(本)本)日)日)若若若(本)若若(本)日)若(本)日)若|b)*(数字| num |#)?*\d+|(数字| num |#)*\d+;
(?i)
是一个内联的不区分大小写的标志。

如果您显示到目前为止的c以及您得到的语法错误,会有所帮助。如果您删除了
/i
,您是否至少使用了
RegexOptions.IgnoreCase
?您还应该使用逐字字符串literal-
@“模式”
,并将
\/
替换为
/
。该模式在C语言中应能正常工作。如果你写得对的话。@Wobbles,老实说,c#是如此简单,我认为没有必要也没有必要发布这篇文章。反正我已经贴了。这不是语法错误。这是因为正则表达式无法识别它在原始堆栈溢出postYes中所说的输入,但是我们需要检查语法、拼写错误以及其他任何可能导致表达式在c#中失败的因素。另外,您没有指出实际问题是什么,它是否抛出异常,是否未找到匹配项?如果是后者,您可以按照
public const string PoBoxRegex = @"^ *((#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)";

public static bool IsPoBox(string addressToCheck)
{
    if (string.IsNullOrWhiteSpace(addressToCheck))
    {
        return false;
    }

    if (Regex.IsMatch(addressToCheck, PoBoxRegex, RegexOptions.IgnoreCase))
    {
        return true;
    }

    return false;
}