import re

def ogCheckStringInGroup(element, group):
    """
    Función para determinar si el elemento pertenece a un conjunto.

    :param element: elemento a comprobar
    :param group: grupo de elementos para comprobar tipo "valor1 valor2 valor3"
    :return: True si pertenece al grupo, False si NO pertenece al grupo
    """
    if not isinstance(element, str) or not isinstance(group, str):
        raise ValueError("Formato incorrecto, ambos parámetros deben ser cadenas.")
    
    return element in group.split()

def ogCheckStringInReg(element, regex):
    """
    Función para determinar si el elemento contiene una "expresión regular".

    :param element: elemento a comprobar
    :param regex: expresión regular
    :return: True si coincide con la expresión, False si NO coincide con la expresión
    """
    if not isinstance(element, str) or not isinstance(regex, str):
        raise ValueError("Formato incorrecto, ambos parámetros deben ser cadenas.")
    
    return re.match(regex, element) is not None

def ogCheckIpAddress(ip):
    """
    Función para determinar si una cadena es una dirección ipv4 válida.

    :param ip: string de la ip a comprobar
    :return: True si es una dirección válida, False si NO es una dirección válida
    """
    if not isinstance(ip, str):
        raise ValueError("Formato incorrecto, el parámetro debe ser una cadena.")

    regex = r"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
    if re.match(regex, ip):
        parts = ip.split('.')
        if all(0 <= int(part) <= 255 for part in parts):
            return True
    return False

