如何为正则表达式指定可选字符

本文关键字:字符 正则表达式 | 更新日期: 2023-09-27 18:05:09

我是Asp.Net的新手,我想使用regularexpressionvalidator验证SSN。在正则表达式验证器中,我给出正则表达式为:

ValidationExpression="'d{3}-'d{2}-'d{4}"

我的正则表达式运行良好。它说的是3位数字,然后是2位数字,再是4位数字。

然而,我也希望正则表达式在文本框完全为空或文本框仅包含以下内容时成功:

__-_-__

其中,_代表"空间"(不是。我已经显示了_,只是为了编辑器可以在so上显示它(。

如何使用regularexpressionvalidator?

如何为正则表达式指定可选字符

此模式应满足所有三个用例:

^([ ]{3}-[ ]{2}-[ ]{4}|'d{3}-'d{2}-'d{4})$

我在上面的字符数组中使用了文字空间,而不是's,因为's也会匹配制表符、换行符和其他空白字符。此外,重要的是要将空格和数字测试分开,而不是在同一个子模式中,否则会匹配像123-__-6_8_这样的垃圾输入。

编辑:@Dan在他的回答中正确地指出,^和$应该包围整个模式,这样我们就可以匹配整个字符串,而不仅仅是在其中的某个地方找到一个SSN

管道字符|指定备用模式。模式's{3}-'s{2}-'s{4}与空格匹配,模式'd{3}-'d{2}-'d{4}与SSN匹配,空白模式与空输入匹配。因此,模式^('s{3}-'s{2}-'s{4}|'d{3}-'d{2}-'d{4}|)$应该与这三个模式中的任何一个匹配。

我刚刚在谷歌上搜索了"SSN正则表达式":

http://regexlib.com/REDetails.aspx?regexp_id=535&AspxAutoDetectCookieSupport=1

^(?!000)([0-6]'d{2}|7([0-6]'d|7[012]))([ -]?)(?!00)'d'd'3(?!0000)'d{4}$

这有帮助吗?

编辑:刚刚看到你也希望空间发挥作用。也许你可以通过在字符范围中包含"空格"来修改上面的内容?

只需在动手前测试两个特殊值。类似(伪代码(:

if ((input == "") || (input = "  - -    ")) {
  // valid but "empty"
} else if (input matches your regex) {
  // valid, non-empty input
}

如果你不能做到这一点,只需在你的RE:中使用|替代方案

ValidationExpression="^('d{3}-'d{2}-'d{4}|   -  -    |)$"

锚点很重要(除非您的框架隐式添加了它们(,否则空匹配将不起作用,您将在所需格式之前或之后(或两者(匹配"垃圾"。(检查第二个块中的空格,而不仅仅是复制/粘贴它:-(

"^(('d{3}-'d{2}-'d{4})|(_ _ - _-_ _ _ _))$"

仅接受输入:
数字"3位、2位、4位",如:123-45-6789
空:_ _ - _-_ _ _ _