正则表达式与模式匹配或为空?

Sai*_*udo 13 regex

我需要匹配模式的正则表达式或为空.

现在我有一个表达......

"\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x"
Run Code Online (Sandbox Code Playgroud)

...匹配美国电话号码.但是,它对我正在测试的字符串是空的有效.如果字符串中包含任何值,则它必须与表达式匹配.

我有其他模式符合美国邮政编码等需要相同条件的模式.

在同一个表达式中实现此目的的最佳方法是什么?

澄清:我在Microsoft的验证应用程序块中使用了RegexValidator.使用它的一个例子如下:

[StringLengthValidator(0, 100, MessageTemplate = "Email must be between {3} and {5}")]
[RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate = "Valid Email Required.")]
public string EmailAddress
{
    get { return _EmailAddress; } 
    set { SetValue<string>(ref _EmailAddress, value); }
}
Run Code Online (Sandbox Code Playgroud)

这就是为什么我需要解决方案在一个表达式中.

Kev*_*ell 30

将整个正则表达式包裹在parens中并放置一个?在末尾:

(\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x)?
Run Code Online (Sandbox Code Playgroud)

  • 实际上......这不行.尾随问号似乎使正则表达式过于宽容.例如,555-1234现在匹配但不应该匹配. (2认同)