ruby - 字母、空格和连字符的正则表达式
问题描述
寻找正则表达式以允许字母(无论是大小写)、空格和破折号在 ruby 中进行验证。完全破解不了。
作为起点,我正在使用:
validates :name, format: { with: /\A[a-zA-Z]+(?: [a-zA-Z]+)?\z/, allow_blank: true}
非常感谢!
解决方案
如果您需要支持所有 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]
- 一个-
或空格\p{L}+
- 一个或多个 Unicode 字母
\z
- 字符串的结尾。
请参阅正则表达式演示。
在评论中,您提到这/\A[-A-Z\s]+\z/i
对您有用,但它也匹配空白字符串或由连字符和空格混合而成的字符串,因为它表示“字符串的开头、一个或多个 ASCII 字母、空格或连字符,然后是细绳”。这可用于只允许输入特定的字符,但这并没有太多验证。
推荐阅读
- javascript - 遍历一组项目并匹配每前 5 个索引,然后是下一个 4,然后是下一个 6,然后是全部增益,5, 4 6
- c++ - 为什么这个重载的 std::function 参数不明确?
- ios - iOS WebSockets TCP_NODELAY
- javascript - PeerJS 不发送/接收数据
- r - R中的Pander表
- javascript - yup:使用 yup 进行密码验证,用于带有切换功能的密码
- image-processing - 将 RAW 图像转换为 BMP 格式
- r - R - 不同数据帧中变量的线性线性回归
- terminal - 如何在 git 上推送我的分支并出现致命错误?
- flutter - 使用 SVG 路径剪切图像