Sha256: f419d99d071386d2b3ae5d3e370c6c2c8e0134a33faf478b1db1d0745384eba2
Contents?: true
Size: 1.03 KB
Versions: 191
Compression:
Stored size: 1.03 KB
Contents
import PhoneNumber._ class PhoneNumber(phoneNumber: String) { lazy val parts: Option[Parts] = parse(phoneNumber) lazy val number: Option[String] = parts map { case (areaCode, prefix, lineNumber) => s"$areaCode$prefix$lineNumber" } lazy val areaCode: Option[String] = parts map (_._1) lazy val prettyPrint: Option[String] = parts map { case (areaCode, prefix, lineNumber) => s"($areaCode) $prefix-$lineNumber" } } object PhoneNumber { type Parts = (String, String, String) private[this] val AreaCodeLength = 3 private[this] val PrefixLength = 3 private[this] val LineNumberLength = 4 private[this] val PhoneNumberPattern = { def part(length: Int) = s"(\\d{$length})" s"""1?${part(AreaCodeLength)}${part(PrefixLength)}${part(LineNumberLength)}""".r } def parse(phoneNumber: String): Option[Parts] = { val digits = phoneNumber filter (_.isDigit) digits match { case PhoneNumberPattern(areaCode, prefix, lineNumber) => Some((areaCode, prefix, lineNumber)) case _ => None } } }
Version data entries
191 entries across 191 versions & 1 rubygems