Utilização de expressões regulares
From LimeSurvey Manual
As expressões regulares têm de começar e terminar com uma barra ("/"). Pode encontrar uma boa biblioteca de expressões regulares em https://www.regexlib.net/. Estes padrões funcionam quase sempre se estiverem rodeados por barras.
Para testar a sua expressão regular, pode utilizar este testador de expressões regulares.
Importante: expressões regulares em condições
Tenha em atenção que, ao utilizar expressões regulares no editor de condições, NÃO deve incluir a barra inicial e final.
Validação de email
Atualização (12/2018): Atualmente, os nomes de domínio não só podem conter caracteres especiais como “ü”, como também podem ter mais de 3 caracteres na extensão, como .tech ou .company. Por isso, a expressão regular de email abaixo apenas verifica se “@” e “.” existem no endereço de email introduzido.
/^.+?@.+?\..+$/
Se quiser validar um endereço por linha, num campo de texto longo com várias linhas:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
Nesta expressão regular desatualizada, o nome de domínio está limitado a 3 caracteres, o que não abrange todos os domínios disponíveis:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
Códigos postais
Códigos postais australianos:
/^[0-9]{4}/
Códigos postais brasileiros
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
Códigos postais canadianos
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
Códigos postais dos EUA
/^[0-9]{5}([- /]?[0-9]{4})?$/
Para que o código postal comece por zero, utilize:
/^[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
Tenha em atenção que esta expressão não é muito exata e que uma validação mais exata é muito mais complexa. Por exemplo, consulte a resposta no StackOverflow e a Wikipédia para obter mais informações.
Códigos postais franceses
/(^[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 (primeiros dois 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 canadianos e dos EUA que incluem símbolos não numéricos, nomeadamente:
. ( ) - (space)
Isto permite-lhe validar números de telefone semelhantes aos seguintes:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Números de telefone australianos
Os seguintes padrões correspondem a todos os tipos de números de telemóvel e de telefone fixo australianos, incluindo com o prefixo de país "+61":
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
Mas não:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Os parênteses, espaços em branco e hífenes são ignorados.
As versões 'Muito preciso:' aqui listadas verificam os primeiros quatro ou cinco dígitos de um número para garantir que são números australianos válidos.
As versões 'Pouco preciso:' verificam apenas o primeiro e o segundo dígitos, pelo que podem permitir números inválidos.
Todos os números de telefone australianos (telemóvel e fixo - indicativo obrigatório)
Muito preciso:
/^\(?(?:\+?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 preciso:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Todos os números de telefone australianos (apenas fixos - indicativo obrigatório)
Muito preciso:
/^\(?(?:\+?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 preciso:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
Números de telefone fixo da Nova Gales do Sul (indicativo opcional)
Muito preciso:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Pouco preciso:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Números de telefone fixo de Victoria e da Tasmânia (indicativo opcional)
Muito preciso:
/^(?:\(?(?:\+?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 (indicativo 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 (indicativo 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]$/
Apenas números de telemóvel 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 telemóvel 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 telemóvel 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 telemóvel 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 20-99
/([2-9][0-9])/
Exemplo: idade 18-35
/(1[8-9]|2[0-9]|3[0-5])/
Exemplo: idade 19-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 decimais opcionais (para preços)
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 milhares
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 a separar 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 quiser perguntar o mês de nascimento de uma pessoa, pode validar a resposta 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 cêntimos opcionais)
/^\$?\d+(\.(\d{2}))?$/
Verificar a utilização da vírgula:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Preço suíço
Um número com duas casas decimais após o ponto decimal, em 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 Textos curtos múltiplos não suporta, de momento, um número mínimo ou máximo de respostas. Uma forma de contornar esta limitação é utilizar um tipo de pergunta Texto livre longo com uma expressão regular.
A expressão abaixo verifica se existe pelo menos uma palavra por linha, em pelo menos 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 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 quiser uma ou mais palavras por linha (entre a linha 1 e a linha 5), pode alterar o conteúdo das últimas chavetas para 0,4 (utilize 0 porque a primeira linha já está a ser correspondida).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
Contagem de palavras
O seguinte limita 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 hora
Existem várias formas 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 utilizar o tipo de pergunta de data (que também pode captar a hora), pode utilizar o tipo de pergunta Texto livre curto com uma das expressões regulares de validação abaixo.
As três cadeias de validação seguintes testam a hora no formato de 24 horas (por 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 seguintes correspondem à hora no formato 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 seguintes correspondem à hora no formato 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, utilize o seguinte (o exemplo é o Texas):
- TX apenas em maiúsculas:
/^(TX)$/
- tx apenas em minúsculas:
/^(tx)$/
- TX em maiúsculas ou minúsculas:
/^([T|t][X|x])$/
Filtro de palavrões
Para filtrar palavrões numa resposta:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
Substitua "ENTERPROFANITYHERE" pelo palavrão pretendido.
O \b permite a passagem de palavras como "assassination" e "hello" se introduzir "ass" ou "hell" como palavrão. Isto também funciona se quiser excluir outras palavras, nomes, etc. das respostas.
Ligações úteis
No início desta secção da wiki, recomendamos que utilize https://regex101.com/ para testar/criar expressões regulares. Também pode utilizar https://www.regextester.com/ para criar expressões, caso não fique satisfeito com a primeira opção. Pode utilizar https://extendsclass.com/regex-tester.html para visualizar expressões regulares.