All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.io.github.gaaabliz.kliz.common.util.RegexUtils.kt Maven / Gradle / Ivy

@file:Suppress("unused")

package io.github.gaaabliz.kliz.common.util

import java.util.regex.Pattern

/**
 * Gestione dei regex dei campi d'input dell'app.
 * @author Loris Farrauto
 */
sealed class RegexUtils {

    companion object {

        fun isValidEmail(email: String): Boolean {
            return email.matches(
                Regex("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$")
            )
        }

        fun isValidPassword(password: String): Boolean {
            return password.matches(
                Regex("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$")
            )
        }

        fun isValidPhoneNumber(phoneNumber: String): Boolean {
            return phoneNumber.matches(
                Regex("^[0-9]{10}$")
            )
        }

        fun isValidName(name: String): Boolean {
            return name.matches(
                Regex("^[a-zA-Z ]{2,}$")
            )
        }

        fun isValidAddress(address: String): Boolean {
            return address.matches(
                Regex("^[a-zA-Z0-9 ]{2,}$")
            )
        }

        fun isValidCity(city: String): Boolean {
            return city.matches(
                Regex("^[a-zA-Z ]{2,}$")
            )
        }

        fun isValidState(state: String): Boolean {
            return state.matches(
                Regex("^[a-zA-Z ]{2,}$")
            )
        }

        fun isValidZip(zip: String): Boolean {
            return zip.matches(
                Regex("^[0-9]{5}$")
            )
        }

        fun isValidCountry(country: String): Boolean {
            return country.matches(
                Regex("^[a-zA-Z ]{2,}$")
            )
        }

        fun isValidCardNumber(cardNumber: String): Boolean {
            return cardNumber.matches(
                Regex("^[0-9]{16}$")
            )
        }

        fun isValidCardExpiry(cardExpiry: String): Boolean {
            return cardExpiry.matches(
                Regex("^[0-9]{4}$")
            )
        }

        fun isValidCardCVV(cardCVV: String): Boolean {
            return cardCVV.matches(
                Regex("^[0-9]{3}$")
            )
        }

        fun isValidCardHolderName(cardHolderName: String): Boolean {
            return cardHolderName.matches(
                Regex("^[a-zA-Z ]{2,}$")
            )
        }

        fun isValidCardType(cardType: String): Boolean {
            return cardType.matches(
                Regex("^[a-zA-Z ]{2,}$")
            )
        }

        fun isValidCardExpiryMonth(cardExpiryMonth: String): Boolean {
            return cardExpiryMonth.matches(
                Regex("^[0-9]{2}$")
            )
        }

        fun isValidCardExpiryYear(cardExpiryYear: String): Boolean {
            return cardExpiryYear.matches(
                Regex("^[0-9]{4}$")
            )
        }

        fun isValidDate(date: String): Boolean {
            return date.matches(
                Regex("^[0-9]{2}/[0-9]{2}/[0-9]{4}$")
            )
        }

        private val DATE_PATTERN: Pattern = Pattern.compile(
            "^((2000|2400|2800|(19|2[0-9])(0[48]|[2468][048]|[13579][26]))-02-29)$"
                    + "|^(((19|2[0-9])[0-9]{2})-02-(0[1-9]|1[0-9]|2[0-8]))$"
                    + "|^(((19|2[0-9])[0-9]{2})-(0[13578]|10|12)-(0[1-9]|[12][0-9]|3[01]))$"
                    + "|^(((19|2[0-9])[0-9]{2})-(0[469]|11)-(0[1-9]|[12][0-9]|30))$"
        )

        private val PASSWORD_PATTERN: Pattern = Pattern.compile("^" +
                "(?=.*[0-9])" +         // almeno 1 numero
                "(?=.*[a-z])" +         // almeno 1 lettera minuscola
                "(?=.*[A-Z])" +         // almeno 1 lettera maiuscola
                "(?=.*[a-zA-Z])" +      // ammessa ogni lettera
                "(?=.*[!@#$%^&+=])" +   // almeno 1 carattere speciale
                "(?=\\S+$)" +           // spazi bianchi non ammessi
                ".{4,20}" +             // almeno 4 caratteri totali
                "$")

        private val NOME_COGNOME_PATTERN: Pattern = Pattern.compile("^" +
                "(?=.*[a-zA-Z])" +      // ammessa ogni lettera
                "(?=\\S+$)" +           // spazi bianchi non ammessi
                ".{2,20}" +             // almeno 2 caratteri totali
                "$")

        private val NUM_TELEFONO_PATTERN: Pattern = Pattern.compile("^" +
                "(?=.*[0-9])" +         // almeno 1 numero
                "(?=\\S+$)" +           // spazi bianchi non ammessi
                ".{9,10}" +             // almeno 10 numeri totali
                "$")

        private val PAESE_CITTA: Pattern = Pattern.compile("^" +
                "(?=.*[a-zA-Z])" +      // ammessa ogni lettera
                "(?:[\\S-][a-zA-Z]+)" + /* spazi bianchi non ammessi e caratteri di separazione
                                           senza una lettera successiva non ammessi */
                "*$")

        private val INDIRIZZO: Pattern = Pattern.compile("^" +
                "[#.0-9a-zA-Z\\s,-]" +  /* ammesse lettere, numeri e simboli di separazione
                                           o # per indicare il numero civico */
                "$")

        private val CODICE: Pattern = Pattern.compile("^" +
                "(?=.*[0-9])" +         // almeno 1 numero
                "(?=.*[A-Z])" +         // almeno 1 lettera maiuscola
                "(?=\\S+$)" +           // spazi bianchi non ammessi
                ".{5,5}" +              // 5 caratteri minimi e totali
                "$")

        private var EMAIL_PATTERN_MULTIPLE = Pattern.compile(
            "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@" +
                    "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?" +
                    "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\." +
                    "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?" +
                    "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|" +
                    "([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$"
        )

    }

    interface Matcher {
        fun isValid(value: String): Boolean
    }

    class DateMatcher() : Matcher {
        override fun isValid(value: String): Boolean {
            return DATE_PATTERN.matcher(value).matches()
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy