在我阅读的文档中:
使用\ A和\ z匹配字符串的开头和结尾,^和$匹配行的开头/结尾.
我将应用正则表达式来检查用户提交的用户名(或电子邮件是否相同).我应该validates_format_of在模型中使用哪个表达式?我无法理解其中的区别:我一直用^和$ ...
Luk*_*uke 211
如果您依赖于正则表达式进行验证,那么您总是希望使用\A和\z.^并且$只会匹配到换行符,这意味着他们可以使用类似的电子邮件me@example.com\n<script>dangerous_stuff();</script>并且仍然可以验证,因为正则表达式只能看到之前的所有内容\n.
我的建议只是事先从用户名或电子邮件中完全删除新行,因为几乎没有正当理由.然后你可以安全地使用EITHER \A \z或^ $.
And*_*are 15
字符串的开头和结尾可能不一定与行的开头和结尾相同.想象一下,如果您使用以下作为测试字符串:
我的
名字
是
安德鲁
请注意,该字符串中有许多行-中^和$人物让你匹配线(基本治疗的开始和结束\n的字符作为分隔符),而\A并\Z允许您匹配整个字符串的开头和结尾.
差异示例
/^foo$/匹配以下任何一项,/\Afoo\z/不符合:whatever1
foo
whatever2Run Code Online (Sandbox Code Playgroud)
foo
whatever2Run Code Online (Sandbox Code Playgroud)
whatever1
fooRun Code Online (Sandbox Code Playgroud)
/^foo$/并且/\Afoo\z/所有符合以下内容:foo
Run Code Online (Sandbox Code Playgroud)