$data Input data. * @param array $rules Rules per field. * @return ValidationResult */ public function validate( array $data, array $rules ): ValidationResult { $result = new ValidationResult(); foreach ( $rules as $field => $rule_string ) { $value = $data[ $field ] ?? null; foreach ( explode( '|', $rule_string ) as $rule ) { $parts = explode( ':', $rule, 2 ); $name = $parts[0]; $arg = $parts[1] ?? ''; $message = $this->check( $name, $arg, $value ); if ( null !== $message ) { $result->add( (string) $field, $message ); break; } } } return $result; } /** * Tells whether a string is a valid domain name (ASCII or punycode). * * @since 0.1.0 * * @param string $domain Domain name. * @return bool */ public static function is_domain( string $domain ): bool { if ( strlen( $domain ) > 253 || false === strpos( $domain, '.' ) ) { return false; } return 1 === preg_match( '/^(?=.{1,253}$)(?:(?!-)[a-z0-9-]{1,63}(?= (float) $arg ? null /* translators: %s: minimum number. */ : sprintf( __( 'Must be at least %s.', 'hostkhata' ), $arg ); case 'max': return is_numeric( $value ) && $value <= (float) $arg ? null /* translators: %s: maximum number. */ : sprintf( __( 'Must be at most %s.', 'hostkhata' ), $arg ); case 'min_length': return is_string( $value ) && mb_strlen( $value ) >= (int) $arg ? null /* translators: %s: minimum number of characters. */ : sprintf( __( 'Must be at least %s characters.', 'hostkhata' ), $arg ); case 'max_length': return is_string( $value ) && mb_strlen( $value ) <= (int) $arg ? null /* translators: %s: maximum number of characters. */ : sprintf( __( 'Must be at most %s characters.', 'hostkhata' ), $arg ); case 'in': return in_array( (string) $value, explode( ',', $arg ), true ) ? null : __( 'Choose one of the allowed values.', 'hostkhata' ); } return null; } }