import * as Joi from 'joi';
import { TypedPropertyDecorator } from '../core';
import { ModifierProviders, JoifulOptions } from './common';
import { AnySchemaModifiers } from './any';
import { EmailOptions } from 'joi';
export interface StringSchemaModifiers extends AnySchemaModifiers {
    /**
     * The string doesn't only contain alphanumeric characters.
     */
    alphanum(): this;
    /**
     * The string is not a valid credit card number.
     */
    creditCard(): this;
    /**
     * Specifies that value must be a valid e-mail.
     */
    email(options?: EmailOptions): this;
    /**
     * Specifies the exact string length required.
     * @param length The required string length.
     * @param encoding If specified, the string length is calculated in bytes using the provided encoding.
     */
    exactLength(length: number, encoding?: string): this;
    /**
     * Requires the string value to be a valid GUID.
     * @param options Optional. options.version specifies one or more acceptable versions.
     * Can be an array or string with the following values: uuidv1, uuidv2, uuidv3, uuidv4, or uuidv5.
     * If no version is specified then it is assumed to be a generic guid which will not validate the
     * version or variant of the guid and just check for general structure format.
     */
    guid(options?: Joi.GuidOptions): this;
    /**
     * Requires the string value to be a valid hexadecimal string.
     */
    hex(): this;
    /**
     * Requires the string value to be a valid hostname as per RFC1123.
     */
    hostname(): this;
    /**
     * Allows the value to match any value in the allowed list or disallowed list in a case insensitive comparison.
     * e.g. `@jf.string().valid('a').insensitive()`
     */
    insensitive(): this;
    /**
     * Requires the string value to be a valid ip address.
     * @param options optional settings:
     *  version - One or more IP address versions to validate against. Valid values: ipv4, ipv6, ipvfuture
     *  cidr - Used to determine if a CIDR is allowed or not. Valid values: optional, required, forbidden
     */
    ip(options?: Joi.IpOptions): this;
    /**
     * Requires the string value to be in valid ISO 8601 date format.
     * If the validation convert option is on (enabled by default),
     * the string will be forced to simplified extended ISO format (ISO 8601).
     * Be aware that this operation uses javascript Date object,
     * which does not support the full ISO format, so a few formats might not pass when using convert.
     */
    isoDate(): this;
    /**
     * Specifies that the string must be in lowercase.
     */
    lowercase(): this;
    /**
     * Specifies the maximum length.
     * @param length The maximum length.
     */
    max(length: number): this;
    /**
     * Specifies the minimum length.
     * @param length The minimum length.
     */
    min(length: number): this;
    /**
     * Defines a pattern rule.
     * @param pattern A regular expression object the string value must match against.
     * @param name Optional name for patterns (useful with multiple patterns).
     */
    pattern(pattern: RegExp, name?: string): this;
    /**
     * Defines a pattern rule.
     * @param pattern A regular expression object the string value must match against.
     * @param name Optional name for patterns (useful with multiple patterns).
     */
    regex(pattern: RegExp, name?: string): this;
    /**
     * Replace characters matching the given pattern with the specified replacement string.
     * @param pattern A regular expression object to match against, or a string of which
     *   all occurrences will be replaced.
     * @param replacement The string that will replace the pattern.
     */
    replace(pattern: RegExp, replacement: string): this;
    /**
     * Requires the string value to only contain a-z, A-Z, 0-9, and underscore _.
     */
    token(): this;
    /**
     * Requires the string value to contain no whitespace before or after.
     * If the validation convert option is on (enabled by default), the string will be trimmed.
     */
    trim(): this;
    /**
     * Specifies that the string must be in uppercase.
     */
    uppercase(): this;
    /**
     * Requires the string value to be a valid RFC 3986 URI.
     * @param options Optional settings:
     *   scheme - Specifies one or more acceptable Schemes, should only include the scheme name.
     *     Can be an Array or String (strings are automatically escaped for use in a Regular Expression).
     *   allowRelative - Allow relative URIs. Defaults to false.
     *   relativeOnly - Restrict only relative URIs. Defaults to false.
     *   allowQuerySquareBrackets - Allows unencoded square brackets inside the query string.
     *     This is NOT RFC 3986 compliant but query strings like abc[]=123&abc[]=456 are very
     *     common these days. Defaults to false.
     *   domain - Validate the domain component using the options specified in string.domain().
     */
    uri(options?: Joi.UriOptions): this;
}
export declare function getStringSchemaModifierProviders(getJoi: () => typeof Joi): ModifierProviders<Joi.StringSchema, StringSchemaModifiers>;
export interface StringSchemaDecorator extends StringSchemaModifiers, TypedPropertyDecorator<string> {
}
export declare const createStringPropertyDecorator: (joifulOptions: JoifulOptions) => import("./common").PropertyDecorator<string, StringSchemaModifiers>;
