今天调试了一个关于正则式验证的bug
情况是这样的:
把一段有换行的文本粘贴在silverlight文本框中,文本内容是“aaa\rbbb\rccc”,保存,通过了验证Regex.IsMatch("aaa\rbbb\rccc","^.{1,15}$"),但是后来又打开内容,这个是后文本内容是“aaa\nbbb\nccc”,
坑爹的问题来了,验证Regex.IsMatch("aaa\nbbb\nccc","^.{1,15}$")不通过了。
无奈,后来上网查看一些常用正则式,发现这么一段话:
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’/n’ 或 ’/r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’/n’ 或 ’/r’ 之前的位置。
然后,我加上了Multiline 属性,变成Regex.IsMatch("aaa\nbbb\nccc","^.{1,15}$",RegexOptions.Multiline),验证通过,不过这货不可靠,因为我发现Regex.IsMatch("aaa\nbbb\nccc","^.{1,3}$",RegexOptions.Multiline)也通过,好像这个枚举值设置,只验证'\n'之前的内容,坑爹。把Multiline值换成Singleline,正常了,成功。
查看silverlight帮助文档,看到RegexOptions枚举默认是None,
None 指定不设置任何选项。
Multiline 多行模式。更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。
Singleline 指定单行模式。更改点 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。
好吧,先这样。