【发布时间】:2016-09-13 20:05:56
【问题描述】:
我在堆栈溢出文章中看到了以下 javascript 正则表达式,我想将其转换为 C#:
var poBox = /^ *((#\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+)/i;
我尝试在开头和结尾删除 / 我认为它用于表示字符串文字,我还在末尾删除 /i 这似乎是为了不区分大小写,但我似乎仍然缺少其他转换在这里。
原始堆栈溢出文章在这里: PO Box Regular Expression Validation
谁能告诉我这里还缺少什么?对正则表达式不太熟悉,我在这里有点挣扎。
编辑:
这是修改后的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;
}
【问题讨论】:
-
如果您展示了到目前为止的 c# 以及您得到的语法错误是什么,将会有所帮助。
-
如果您删除了
/i,您是否至少在使用RegexOptions.IgnoreCase?您还应该使用逐字字符串文字 -@"pattern",并将\/替换为/ -
该模式应该在 C# 中运行良好。如果你写得对。
-
@Wobbles,老实说,c# 是如此简单,我认为没有必要或必要发布此内容。反正我已经发过了。这不是语法错误。事实上,正则表达式无法识别它在原始堆栈溢出帖子中所说的输入
-
是的,但是我们需要检查语法、拼写错误以及任何其他可能导致表达式在 c# 中失败的事情。您也没有指出实际问题是什么,它是否抛出异常,是否找不到匹配项?如果后者可以按照MCVE 的建议提供一个示例字符串来测试它
标签: javascript c# regex