Usando expressões regulares
From LimeSurvey Manual
As expressões regulares devem começar e terminar com uma barra ("/"). Você pode encontrar uma boa biblioteca de expressões regulares em https://www.regexlib.net/. Esses padrões quase sempre funcionam se forem delimitados por barras.
Para testar sua regex, você pode usar este testador de regex.
Importante: expressões regulares em condições
Observe que, ao usar expressões regulares no editor de condições, NÃO inclua a barra inicial e a final.
Validação de e-mail
Atualização (12/2018): Como atualmente os nomes de domínio podem conter caracteres especiais como “ü” e também ter mais de 3 caracteres, como .tech ou .company, a regex de e-mail abaixo verifica apenas se “@” e “.” existem no endereço de e-mail informado.
/^.+?@.+?\..+$/
Se você quiser validar um endereço por linha, em um campo de texto longo com várias linhas:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
Nesta regex desatualizada, o nome de domínio é limitado a 3 caracteres, o que não cobre todos os domínios disponíveis:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
Códigos postais
Códigos postais da Austrália:
/^[0-9]{4}/
Códigos postais do Brasil (CEP)
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
Códigos postais do Canadá
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
Códigos postais dos EUA (ZIP codes)
/^[0-9]{5}([- /]?[0-9]{4})?$/
Para que o código postal comece com zero, use:
/^[0-9]{5}(?:-[0-9]{4})?$/
Códigos postais do Reino Unido
/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
Observe que esta expressão não é muito exata e que uma validação mais exata é bem mais complexa. Por exemplo, consulte a resposta no StackOverflow e a Wikipédia para mais informações.
Códigos postais da França
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/
A expressão acima é muito precisa e verifica se o departamento francês existe (os dois primeiros dígitos), incluindo os departamentos e territórios ultramarinos (DOM-TOM).
Números de telefone
Números de telefone dos EUA
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
ou
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
Esta segunda opção corresponde a todos os números de telefone do Canadá e dos EUA que incluam símbolos não numéricos, como:
. ( ) - (space)
Isso permite validar números de telefone semelhantes aos abaixo:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Números de telefone da Austrália
Os padrões a seguir correspondem a diversos números de celular e de telefone fixo da Austrália, inclusive com o prefixo de país "+61":
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
Mas não correspondem a:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Parênteses, espaços em branco e hifens são ignorados.
As versões 'Muito precisa:' listadas aqui verificam os primeiros quatro ou cinco dígitos de um número para garantir que sejam números australianos válidos.
As versões 'Pouco precisa:' verificam apenas o primeiro e o segundo dígitos, portanto podem permitir números inválidos.
Todos os números de telefone da Austrália (celular e fixo - código de área obrigatório)
Muito precisa:
/^\(?(?:\+?61|0)(?:(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}|4\)?[ -]?(?:(?:[01][ -]?[0-9]|2[ -]?[0-57-9]|3[ -]?[1-9]|4[ -]?[7-9]|5[ -]?[018])[ -]?[0-9]|3[ -]?0[ -]?[0-5])(?:[ -]?[0-9]){5})$/
Pouco precisa:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Todos os números de telefone da Austrália (somente fixos - código de área obrigatório)
Muito precisa:
/^\(?(?:\+?61|0)(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}$/
Pouco precisa:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
Números de telefone fixo de Nova Gales do Sul (código de área opcional)
Muito precisa:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Pouco precisa:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Números de telefone fixo de Victoria e da Tasmânia (código de área opcional)
Muito precisa:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
Pouco preciso:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
Números de telefone fixo de Queensland (código de área opcional)
Muito preciso:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
Pouco preciso:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
Números de telefone fixo da Austrália Meridional, Território do Norte e Austrália Ocidental (código de área opcional)
Muito preciso:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/
Pouco preciso:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
Somente números de celular australianos
Muito preciso:
/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/
Pouco preciso:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
Número de telefone belga
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/
Número de celular belga
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
Número de telefone francês
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
Número de celular francês
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
Número de telefone luxemburguês
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
Número de celular luxemburguês
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
Notas alemãs (com mais ou menos opcional)
/^[1-6]{1}[\+|\-]?$/
Validação de idade
Exemplo: idade de 20 a 99
/([2-9][0-9])/
Exemplo: idade de 18 a 35
/(1[8-9]|2[0-9]|3[0-5])/
Exemplo: idade de 19 a 65
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
Validação de números
Números de 1 a 99999
/^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])$/
/^[1-9][0-9]{0,4}$/ does the same as above but should run a little faster
Números de 1 a 999, de 1.000 a 999.999 e a 999.999.999
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
Aceita números de 1 a 999, de 1.000 a 999.999 e a 999.999.999, mas rejeita números como 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333
Validação de números com decimal opcional (para preço)
Aceita números de 0 a 199, com 2 casas decimais opcionais:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/
Validação de números com separador de milhar
Espaço como separador, sem sinal de menos
/^(?!0)\d{1,3}(\ \d{3})*$/
Ponto como separador, sinal de menos permitido
/^-?(?!0)\d{1,3}(\.\d{3})*$/
Força duas casas decimais e aceita números de 1.00 a 999,999,999.00 com uma vírgula opcional separando milhares/milhões, incluindo todos os seguintes: 1.00, 1,000.00, 12,345.67, 12345,02, 123,456,468.00, 1234566.00, 123456789.00 mas não 1,23.00, 12,3.4 ou 1234,43.04
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Semelhante ao anterior: força duas casas decimais, mas aceita um "0" antes do separador decimal ",".
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Igual ao anterior, mas as duas casas decimais são opcionais:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/
Mês (1-12)
Se você quiser perguntar o mês em que uma pessoa nasceu, pode validar a entrada da seguinte forma:
/^[0]*[1-9]$|^[0]*1[0-2]$/
Largura mínima (definida como 3 neste exemplo)
/^.{3,}$/
Moeda
Moeda dos EUA (símbolo do dólar e centavos opcionais)
/^\$?\d+(\.(\d{2}))?$/
Verificar o uso de vírgula:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Preço suíço
Um número com duas casas decimais após o separador decimal, sendo que a última é 5 ou 0:
/^(\d+)(\.\d(05)?)?$/
Validar pontuação
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
Validação de texto
O tipo de pergunta Texto curto múltiplo não oferece suporte a um mínimo ou máximo de respostas no momento. Uma forma de contornar isso é usar um tipo de pergunta Texto livre longo com uma expressão regular.
A expressão abaixo testa se há pelo menos uma palavra por linha, em no mínimo 3 linhas e no máximo 10 linhas:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is
Se você quiser, por exemplo, cinco palavras por linha, pode alterar o primeiro e o último asterisco para {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is
Se você quiser uma ou mais palavras por linha (entre a linha 1 e a linha 5), pode alterar o conteúdo das últimas chaves para 0,4 (observe que se usa 0 porque a primeira linha já está sendo correspondida).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
Contagem de palavras
O exemplo a seguir restringe o número de palavras permitidas a um mínimo de 1 e um máximo de 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
Para aumentar o mínimo, altere a parte zero de {0,199}.
Para aumentar ou diminuir o máximo, altere a parte "199" de {0,199}.
Validação de horário
Há várias maneiras de escrever formatos de hora. Algumas das opções possíveis são 12 horas ou 24 horas, com ou sem segundos. Embora seja possível usar o tipo de pergunta data (ele também pode capturar a hora), você pode usar o tipo de pergunta Texto livre curto com uma das expressões regulares de validação abaixo.
As três strings de validação a seguir testam o horário de 24 horas (em ordem de aparição) sem segundos, com segundos opcionais e, por último, com segundos obrigatórios:
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/
As três a seguir correspondem ao horário de 12 horas, como acima: com segundos, com segundos opcionais e com segundos obrigatórios:
/^(?">00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))$/
/^(?:00:[0-5][0-9](?::[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?::[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?::[0-5][0-9])? (?:pm|PM))$/
/^(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))$/
As três a seguir correspondem ao horário de 12 ou 24 horas, como acima: com segundos, com segundos opcionais e com segundos obrigatórios:
/^(?:(?:00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9])$/
/^(?:(?:00:[0-5][0-9](?[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9](?[0-5][0-9])?)$/
/^(?:(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])$/
Estados dos EUA
Para validar um estado, use o seguinte (o exemplo é o Texas):
- TX apenas letras maiúsculas:
/^(TX)$/
- tx apenas letras minúsculas:
/^(tx)$/
- TX em letras maiúsculas ou minúsculas:
/^([T|t][X|x])$/
Filtro de palavrões
Para filtrar palavrões de uma resposta:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
Substitua "ENTERPROFANITYHERE" pela palavra ofensiva desejada.
O \b permite a passagem de palavras como "assassination" e "hello" se você inserir "ass" ou "hell" como palavrão. Isso também funciona se você quiser omitir outras palavras, nomes etc. das respostas.
Links úteis
No início desta seção do wiki, recomendamos que você use https://regex101.com/ para testar/criar expressões regulares. Você também pode usar https://www.regextester.com/ para criar expressões, caso não goste da primeira opção. Você pode usar https://extendsclass.com/regex-tester.html para visualizar expressões regulares.