本篇温习一下正则表达式,顺便列举几个 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