Ruby 字母、空格和连字符的正则表达式
正在寻找允许字母大小写、空格和破折号在ruby中进行验证的正则表达式。不能完全破解它 作为起点,我使用:Ruby 字母、空格和连字符的正则表达式,ruby,regex,Ruby,Regex,正在寻找允许字母大小写、空格和破折号在ruby中进行验证的正则表达式。不能完全破解它 作为起点,我使用: validates :name, format: { with: /\A[a-zA-Z]+(?: [a-zA-Z]+)?\z/, allow_blank: true} 非常感谢 此正则表达式将允许字母、空格和连字符:/^[A-Za-z\s\-]+$/此正则表达式将允许字母、空格和连字符:/^[A-Za-z\s\-]+$/,如果您需要支持所有Unicode字母,并确保-和空格仅出现在字母之间
validates :name, format: { with: /\A[a-zA-Z]+(?: [a-zA-Z]+)?\z/, allow_blank: true}
非常感谢 此正则表达式将允许字母、空格和连字符:/^[A-Za-z\s\-]+$/此正则表达式将允许字母、空格和连字符:/^[A-Za-z\s\-]+$/,如果您需要支持所有Unicode字母,并确保-和空格仅出现在字母之间,不会出现连续的空格/连字符,并且可能有任意数量的空格/连字符,使用 /\A\p{L}+?:[-]\p{L}+*\z/ /\A\p{L}+?:[-\s]\p{L}+*\z/ /\A\p{L}+?:[-\p{Zs}\t]\p{L}+*\z/ 总之, \A-匹配字符串的开头 \p{L}+-一个或多个字母 ?:[-\s]\p{L}+*-与零次或多次出现的 [-\s]-a-或空白 \p{L}+-一个或多个Unicode字母 \z-字符串的结尾。 看
在注释中,您提到/\A[-A-Z\s]+\Z/i适用于您,但它也匹配空白字符串,或者是连字符和空格的混合字符串,因为它表示字符串的开头、一个或多个ASCII字母、空格或连字符,然后是字符串的结尾。这可用于只允许输入特定字符,但这不会验证太多。如果需要支持所有Unicode字母,并确保-和空格仅出现在字母之间,并且可能不会出现连续的空格/连字符,并且可能存在任意数量的空格/连字符,请使用 /\A\p{L}+?:[-]\p{L}+*\z/ /\A\p{L}+?:[-\s]\p{L}+*\z/ /\A\p{L}+?:[-\p{Zs}\t]\p{L}+*\z/ 总之, \A-匹配字符串的开头 \p{L}+-一个或多个字母 ?:[-\s]\p{L}+*-与零次或多次出现的 [-\s]-a-或空白 \p{L}+-一个或多个Unicode字母 \z-字符串的结尾。 看
在注释中,您提到/\A[-A-Z\s]+\Z/i适用于您,但它也匹配空白字符串,或者是连字符和空格的混合字符串,因为它表示字符串的开头、一个或多个ASCII字母、空格或连字符,然后是字符串的结尾。这可以用于只允许输入特定的字符,但这不会验证太多。欢迎使用SO。我怀疑这个问题被否决了,因为不清楚你在问什么。我可以推荐一个资源,tho。您可以使用ruby中部分正则表达式的键。不同语言中有不同风格的正则表达式,您可以自己尝试一下。/\A[-A-Z\s]+\Z/i就足够了。另外,“λ”是字母吗?“呫”是一封信吗?“ả”是字母吗?如果您需要支持所有Unicode字母,请确保-和空格只出现在字母之间,并且不可能出现连续的空格/连字符,并且可能有任意数量的空格/连字符,请使用/\a\p{L}+?:[-]\p{L}+*\z/到目前为止,只有@Wiktor正确回答和注释,因为不要求允许使用空格,所以只允许使用空格。假设str=a\nb。那么str.match呢/\A[-A-Z\s]+\Z/i=>true,这是不正确的,而str.match/\A\p{L}+?:[-]\p{L}+*\z/=>false。只需将\s更改为空格,即可将前者限制为空格。我一次又一次地看到这个错误。欢迎来到SO。我怀疑这个问题被否决了,因为不清楚你在问什么。我可以推荐一个资源,tho。您可以使用ruby中部分正则表达式的键。不同语言中有不同风格的正则表达式,您可以自己尝试一下。/\A[-A-Z\s]+\Z/i就足够了。另外,“λ”是字母吗?“呫”是一封信吗?“ả”是字母吗?如果您需要支持所有Unicode字母,请确保-和空格只出现在字母之间,并且不可能出现连续的空格/连字符,并且可能有任意数量的空格/连字符,请使用/\a\p{L}+?:[-]\p{L}+*\z/到目前为止,只有@Wiktor正确回答和注释,因为不要求允许使用空格,所以只允许使用空格。假设str=a\nb。那么str.match呢/\A[-A-Z\s]+\Z/i=>true,这是不正确的,而str.match/\A\p{L}+?:[-]\p{L}+*\z/=>false。只需将\s更改为空格,即可将前者限制为空格。我一次又一次地看到这个错误。小心,^和$是Ruby中行的开头/结尾,而不是字符串。您几乎总是需要\A和\z。小心,^和$在Ruby中是行的开头/结尾,而不是字符串。您几乎总是希望使用\A和\z。