本篇温习一下正则表达式,顺便列举几个 Ruby 常用的正则表达式。
[abc] 中括号内的任意一个,匹配到,即返回位置 index [^abc] 出去中括号内的任意一个,匹配到,即返回位置 index [a-z] 小写 a 到 z 中的任意一个 [a-zA-Z] 小写 a 到 z 中,或者大写 A 到 Z 中的任意一个 ^ 以什么开始 $ 以什么结束 \A 以字符开始 \z 以字符结束 . 任何字符 \s 任何空白字符 \S 任何非空白字符 \d 任何数字 \D 任何非数字 \w 任何单词(包括:字母,数字,下划线) \W 任何非单词 \b 匹配一个单词边界,也就是指单词和空格间的位置 如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er” (a|b) 字符 a 或者 b a? 零个或一个 a a* 零个或多个 a a+ 一个或多个 a a{3} 3个a a{3,} 3个或多个 a a{3,6} 3至6个 a i 忽略大小写 m 匹配多行,把换行字符识别为正常字符 x 忽略空格,允许在正则表达式中进行注释 # 字符串通过 %Q 进行分隔一样,Ruby 允许您以 %r 作为正则表达式的开头,后面跟着任意分隔符。 # 这在描述包含大量您不想转义的斜杠字符时非常有用。 # 下面匹配单个斜杠字符,不转义 %r|/| # Flag 字符可通过下面的语法进行匹配 %r[(.*)>]i
# 用户名必须是:字母、数字、下划线和汉字 USER_NAME = /^[a-z0-9\w_\p{Han}]*$/i # 密码必须是:字母、数字和下划线 USER_PASSWORD = /^[a-z0-9\w_]*$/i # 合法的邮箱格式 USER_EMAIL = /\A\s*([-a-z0-9+._]{1,64})@((?:[-a-z0-9]+\.)+[a-z]{2,})\s*\z/i # 中国境内合法的手机号 USER_CELLPHONE = /^1[3,4,5,8][0-9]{9}\Z/i # 必须是数字 USER_INT = /^\d*$/ # 智能移动设备 MOBILE_USER_AGENTS = 'android|ipad|iphone|ipod' def valid_username?(value) if value.present? str = value.force_encoding('utf-8').encode str =~ USER_NAME end end def is_mobile_device?(user_agent) user_agent.to_s.downcase =~ Regexp.new(MOBILE_USER_AGENTS) end
参考链接
Rubular: a Ruby regular expression editor and tester
2015-07-05