在文档中我读到:
使用 \A 和 \z 匹配字符串的开头和结尾,使用 ^ 和 $ 匹配行的开头/结尾。
我将应用正则表达式来检查用户提交的用户名(或电子邮件)。我应该在模型中使用哪个表达式与validates_format_of
一起使用?我不理解它们的区别:我一直使用^和$...
\A
和\z
。 ^
和$
只会匹配到换行符之前的部分,这意味着它们可以使用像 me@example.com\n<script>dangerous_stuff();</script>
这样的电子邮件地址仍然能够验证,因为正则表达式只看到\n
之前的所有内容。\A
\z
或^
$
。\z
而不是\Z
! - Petr$
来检查“字符串结尾”,它也会被绕过,而不是使用\z
。 - Doctor Blue示例演示区别
/^foo$/
匹配以下任意一个,/\Afoo\z/
不匹配:whatever1
foo
whatever2
foo
whatever2
whatever1
foo
/^foo$/
和 /\Afoo\z/
都匹配以下内容:foo
字符串的起始和结束位置不一定与行的起始和结束位置相同。想象一下,如果您将以下内容用作测试字符串:
我的
名字
是
安德鲁
请注意,该字符串有多行 - ^
和$
字符允许您匹配这些行的开头和结尾(基本上将\n
字符视为分隔符),而\A
和\Z
允许您匹配整个字符串的开头和结尾。