【发布时间】:2019-01-04 13:47:48
【问题描述】:
寻找允许字母(无论大小写)、空格和破折号在 ruby 中进行验证的正则表达式。完全破解不了。
作为我使用的起点:
validates :name, format: { with: /\A[a-zA-Z]+(?: [a-zA-Z]+)?\z/, allow_blank: true}
非常感谢!
【问题讨论】:
-
欢迎来到 SO。我怀疑这个问题已被否决,因为不清楚您要问什么。我可以推荐rubular.com 作为资源。您可以在 ruby 中使用部分正则表达式的密钥(不同语言的正则表达式有不同的风格),并自己尝试一下。
-
/\A[-A-Z\s]+\z/i就足够了。 -
另外,“λ”是字母吗? “я”是字母吗? “ä”是字母吗?
-
如果您需要支持所有 Unicode 字母,请确保
-并且空格只出现在字母之间,并且不能出现连续的空格/连字符(并且可能有任意数量的空格/连字符),使用/\A\p{L}+(?:[- ]\p{L}+)*\z/ -
到目前为止,在答案和 cmets 中,只有 @Wiktor 正确,因为不要求允许空格,只允许空格。假设
str = "a\nb"。然后是str.match? /\A[-A-Z\s]+\z/i #=> true,这是不正确的,而str.match? /\A\p{L}+(?:[- ]\p{L}+)*\z/ #=> false。前者可以通过简单地将\s更改为空格来限制为空格。我一次又一次地看到这个错误。