scala的隐式对象和隐式类1.3

19 阅读2分钟

在上一个手机号的基础上,改进代码,判断是否为正确的身份证号码。

用隐式类判断是否为身份证

目标: 让任意一个字符串具备一个功能:判断是否是一个合法的身份证

string类是系统提供的,并没有isIDCard这个方法 现在就要去在不修改String类的情况下,增加这个方法

package imp

/*

    目标:让任意一个字符串具备一个功能:判断是否是一个合法的手机号
    string类是系统提供的,并没有isPhon这个方法
    现在就要去在不修改String类的情况下,增加这个方法

 * */
object imp05 {
  implicit class StrongString(s:String) {
    def isPhon : Boolean={
      val reg = "^1[35678]\d{9}$".r
      reg.matches(s)
    }
    def isIDCard: Boolean = {
      val idReg = "^\d{17}[0-9Xx]$".r // 简单18位格式验证,实际需更复杂校验
      idReg.matches(s)
    }
  }
  def main(args: Array[String]): Unit = {
    val str = new String("13617295643")
    //val  str = "13617295643"
    //str.isPhone()//判断自己是否是一个合法的手机号,返回值是boolen  true,false
    println(str.isPhon)
    println("134567891a".isPhon)
    println("130567891a".isPhon)
    println("429005202011012231".isIDCard)//true
    println("40900520201101223a".isIDCard)//false
  }
}

老师讲

package imp

/*

    目标:让任意一个字符串具备一个功能:判断是否是一个合法的手机号
    string类是系统提供的,并没有isPhon这个方法
    现在就要去在不修改String类的情况下,增加这个方法

 * */
object imp05 {
  implicit class StrongString(s:String) {
    def isPhon : Boolean={
      val reg = "^1[35678]\d{9}$".r
      reg.matches(s)
    }
    def isIDCard: Boolean = {
      val reg = "^[1-9]\d{5}([181920])\d{2}((0[1-9])|(1[0-2]))((0[1-9]|[1-9])|10|20|30|31)\d{3}[0-9Xx]$".r
      reg.matches(s)
    }
  }
  def main(args: Array[String]): Unit = {
    val str = new String("13617295643")
    //val  str = "13617295643"
    //str.isPhone()//判断自己是否是一个合法的手机号,返回值是boolen  true,false
    println(str.isPhon)
    println("134567891a".isPhon)
    println("130567891a".isPhon)
    println("429005202011012231".isIDCard)//true
    println("40900520201101223a".isIDCard)//false
  }
}