Ruby Regular Expressions

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

rocket-wing