Skip to content

Instantly share code, notes, and snippets.

@foxicode
foxicode / String+insert.swift
Created March 3, 2020 19:11
Swift String extension inserting separator between symbol groups
import Foundation
extension String {
mutating func insert(separator: String, every n: Int) {
self = inserting(separator: separator, every: n)
}
func inserting(separator: String, every n: Int) -> String {
var result: String = ""
let characters = Array(self)
@foxicode
foxicode / String+md5.kt
Created March 10, 2020 18:38
Kotlin String md5 extension
import java.security.MessageDigest
val String.md5: String
get() {
val bytes = MessageDigest.getInstance("MD5").digest(this.toByteArray())
return bytes.joinToString("") {
"%02x".format(it)
}
}
@foxicode
foxicode / String+sha1.kt
Created March 10, 2020 18:45
Kotlin String sha1 extension
import java.security.MessageDigest
val String.sha1: String
get() {
val bytes = MessageDigest.getInstance("SHA-1").digest(this.toByteArray())
return bytes.joinToString("") {
"%02x".format(it)
}
}
@foxicode
foxicode / String+isEmailValid.kt
Created March 10, 2020 18:55
Kotlin String email validator
import java.util.regex.Pattern
fun String.isEmailValid(): Boolean {
val expression = "^[\\w.-]+@([\\w\\-]+\\.)+[A-Z]{2,8}$"
val pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE)
val matcher = pattern.matcher(this)
return matcher.matches()
}
@foxicode
foxicode / JSONObject+getOrNull.kt
Created March 10, 2020 19:18
Kotlin JSONObject extension to get data in a safe way
import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject
fun JSONObject.getIntOrNull(name: String): Int? =
try {
getInt(name)
}
catch (e: JSONException) {
val strValue = getStringOrNull(name)
@foxicode
foxicode / String+phone_android.kt
Created March 10, 2020 19:44
Kotlin String extension validating and formatting phone number (Android version)
import android.content.Context
import io.michaelrocks.libphonenumber.android.PhoneNumberUtil
fun String.formatPhoneNumber(context: Context, region: String): String? {
val phoneNumberKit = PhoneNumberUtil.createInstance(context)
val number = phoneNumberKit.parse(this, region)
if (!phoneNumberKit.isValidNumber(number))
return null
return phoneNumberKit.format(number, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
@foxicode
foxicode / String+phone_jvm.kt
Created March 10, 2020 20:20
Kotlin String extension to validate and format phone number (JVM version)
import com.google.i18n.phonenumbers.PhoneNumberUtil
fun String.formatPhoneNumber(region: String): String? {
val phoneNumberKit = PhoneNumberUtil.getInstance()
val number = phoneNumberKit.parse(this, region)
if (!phoneNumberKit.isValidNumber(number))
return null
return phoneNumberKit.format(number, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
}
@foxicode
foxicode / String+lastPathComponent.kt
Created March 10, 2020 20:41
Kotlin String extension to get last path component
val String.lastPathComponent: String
get() {
var path = this
if (path.endsWith("/"))
path = path.substring(0, path.length - 1)
var index = path.lastIndexOf('/')
if (index < 0) {
if (path.endsWith("\\"))
path = path.substring(0, path.length - 1)
index = path.lastIndexOf('\\')
@foxicode
foxicode / String+isEmailValid2.swift
Created March 15, 2020 16:00
Alternative way to check if String is email (Swift)
extension String {
func matches(_ expression: String) -> Bool {
if let range = range(of: expression, options: .regularExpression, range: nil, locale: nil) {
return range.lowerBound == startIndex && range.upperBound == endIndex
} else {
return false
}
}
var isValidEmail: Bool {
@foxicode
foxicode / String+content.kt
Created March 15, 2020 16:34
Kotlin String extension to analyze content
val String.containsLatinLetter: Boolean
get() = matches(Regex(".*[A-Za-z].*"))
val String.containsDigit: Boolean
get() = matches(Regex(".*[0-9].*"))
val String.isAlphanumeric: Boolean
get() = matches(Regex("[A-Za-z0-9]*"))
val String.hasLettersAndDigits: Boolean