我是Asp.Net的新手,我想使用regularexpressionvalidator验证SSN。在regularexpressionvalidator中,我将regularrexpression表示为:
ValidationExpression="\d{3}-\d{2}-\d{4}"
我的正则表达式正常。它表示3位数字 - 然后是2位数字 - 然后是4位数字。
但是,当文本框为空或文本框仅包含时,我还希望正则表达式成功:
_ _ - _-_ _ _ _
其中_代表“空格”(不是_。我已经显示_只是因此编辑可以在SO上显示它。)
我怎样才能使用regularexpressionvalidator?
答案 0 :(得分:4)
此模式应满足所有三种用例:
^([ ]{3}-[ ]{2}-[ ]{4}|\d{3}-\d{2}-\d{4})$
我在上面的字符数组中使用了文字空格而不是\s
,因为\s
也会匹配制表符,换行符和其他空白字符。此外,重要的是保持空格和数字测试分开,而不是在同一子模式中,否则您将匹配像123-__-6_8_
这样的垃圾输入。
编辑:@Dan在他的回答中正确地指出^和$应该围绕整个模式,所以我们匹配整个字符串,而不只是在其中找到SSN。
答案 1 :(得分:2)
竖线字符|
指定备用图案。模式\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}|)$
应与这三种模式中的任何一种匹配。
答案 2 :(得分:1)
我只是用谷歌搜索'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}$
这有帮助吗?
编辑:刚刚看到你想要空间也可以工作。也许您可以通过在字符范围中包含“空格”来修改上述内容吗?
答案 3 :(得分:1)
只需先测试你的两个特殊值。喜欢(伪代码):
if ((input == "") || (input = " - - ")) {
// valid but "empty"
} else if (input matches your regex) {
// valid, non-empty input
}
如果你不能这样做,只需在你的RE中使用|
替代方案:
ValidationExpression="^(\d{3}-\d{2}-\d{4}| - - |)$"
锚点很重要(除非您的框架隐式添加它们),否则空匹配将无效,您将在所需格式之前或之后(或两者)匹配“垃圾”。 (检查第二个块中的空格,不要只复制/粘贴它:-))
答案 4 :(得分:1)
"^((\d{3}-\d{2}-\d{4})|(_ _ - _-_ _ _ _))$"
仅接受输入:
数字“3位,2位,4位”如:123-45-6789
空:_ _ - _-_ _ _ _