当我这样做:
var m = Regex.Match("aabbccddeeff", "[0-9a-fA-F]{6}");
Run Code Online (Sandbox Code Playgroud)
结果我得到的只有aabbcc.实际上(使用.Matches)有两个匹配:aabbcc和ddeeff.
为什么?这会导致DataAnnotations.RegularExpressionAttribute出现问题,因为它需要覆盖整个输入值的单个匹配.
如何正确编写以获得单个匹配?
你想在这里实现什么目标?
提供的正则表达式将尝试匹配正好6个字母/数字的序列.由于输入中有12个连续的字母数字字符,因此有2个连续匹配.Regex.Match返回第一个,并且Regex.Matches它们都完全按照它们应该返回.
如果你想声明整个文本将与正则表达式完全匹配(因为你使用它进行输入验证,我认为是这种情况),所以整个输入字符串应该满足Regex.IsMatch,将表达式更改为:
^[0-9a-fA-F]{6}$
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您不希望将匹配限制为恰好6个字符,请将其更改为:
[0-9a-fA-F]+
Run Code Online (Sandbox Code Playgroud)
或者,如果您要匹配12个字符:
[0-9a-fA-F]{12}
Run Code Online (Sandbox Code Playgroud)
当然,你可能需要^和$周围的最后2个表达过根据您的需要.
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |