Você pode usar expressões em uma pesquisa para controlar o comportamento padrão das perguntas. Uma pergunta, ou um conjunto de perguntas, pode ser ocultada e revelada com base em respostas anteriores utilizando expressões na coluna relevante . Quando uma pergunta é ocultada por meio de uma expressão na coluna relevante, nenhum dado é enviado para a pergunta.
Anotação:
No Survey123 Mobile e aplicativo de campo, se uma resposta for inserida para uma pergunta ocultada posteriormente devido a uma expressão relevante, a resposta será apagada. Se a pergunta se tornar relevante novamente, uma nova resposta deve ser inserida. No aplicativo da web, a resposta não é apagada, portanto, se a pergunta se tornar relevante novamente, a resposta inserida anteriormente será usada.
Você também pode aplicar expressões à coluna de somente leitura, o que pode desativar a entrada para uma pergunta ou grupo com base no resultado da expressão. A coluna exigida também suporta expressões, permitindo que a pesquisa exija que o usuário responda a uma pergunta apenas sob condições específicas.
Anotação:
As expressões de somente leitura s não são suportadas no aplicativo da web.
As perguntas anteriores devem sempre ser referidas nas expressões com o formato ${field_name}.
Visibilidade da pergunta
Você pode ocultar uma pergunta da visualização com uma expressão usando a coluna body::esri:visible. Esta coluna oculta a pergunta se a expressão que ela contém não for avaliada como verdadeira, enquanto mantém o conteúdo da pergunta. Por exemplo, a expressão ${edit_location}='yes' faz com que a pergunta seja exibida apenas se a pergunta edit_location estiver definida para yes.
Esse comportamento é semelhante ao da coluna relevante, com ambas as colunas ocultando uma pergunta até que a expressão na coluna seja avaliada como verdadeira. A principal diferença é que body::esri:visible não apaga o valor de uma pergunta que não seja visível pela expressão e envia valores existentes para a camada de feição. Use a coluna relevante em vez de body::esri:visible caso queira garantir que a pergunta não tenha valores calculados ou armazenados quando não for relevante.
Ao usar as colunas body::esri:visible ou relevante para controlar a visibilidade da pergunta, obrigatórios, padrões, restrições e máscaras de entrada são aplicados apenas quando a pergunta está visível.
Você também pode controlar a visibilidade das perguntas usando o tipo de pergunta oculta e a aparência hidden, mas elas não podem ser controladas com uma expressão.
Anotação:
As perguntas de imagem, áudio e arquivo não suportam ser ocultadas pela coluna body::esri:visible.
Expressões simples
A melhor maneira de utilizar uma destas expressões é alterar o comportamento ou visibilidade de uma pergunta, a menos que uma resposta em particular tenha sido fornecida anteriormente. Por exemplo, a seguinte expressão verifica se a resposta da pergunta anterior é verdadeira:
${previous_question} = 'true'
O exemplo a seguir verifica se a resposta da pergunta anterior foi maior ou igual a 100:
${previous_question} < 100
O tipo de pergunta select_multiple contém valores de forma diferente de outros tipos de pergunta, com cada resposta marcada inserida na ordem em que foi selecionada, separada por vírgulas. Por exemplo, a seleção de respostas A e B nesta ordem apresentará a resposta como A, B. Para usar uma pergunta select_multiple como parte de uma expressão, você deve usar a função selected. O exemplo a seguir verifica se o usuário respondeu a pergunta anterior com A e funciona independentemente das outras respostas escolhidas:
selected(${previous_question}, 'A')
A função count-selected conta o número de opções que foram selecionadas em uma pergunta select_multiple e fornece um número para usar como operador. O exemplo a seguir verifica se a pergunta anterior tinha mais de duas opções selecionadas:
count-selected(${previous_question}) > 2
Você pode usar a função count-selected como uma restrição em perguntas de imagem ou arquivo com a aparência multiline, para controlar o número de arquivos enviados.
Expressões matemáticas
O exemplo a seguir combina vários operadores e perguntas:
${previous_question} + ${other_previous_question} <= 100
Ao usar operadores matemáticos, pode ser necessário converter valores em números. No exemplo anterior, assume-se que previous_question e other_previous_question são inteiros ou decimais, mas se os tipos de pergunta forem strings, converta-os da seguinte maneira:
int(${previous_question}) + int(${other_previous_question}) <= 100
Você também pode executar expressões matemáticas nas perguntas de data, salvas como tempo Unix, a quantidade de milissegundos validada desde 1 de Janeiro de 1970. A expressão a seguir revela uma pergunta apenas se a resposta à pergunta anterior for mais de duas semanas antes de hoje:
if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)
Expressões regulares
Uma expressão regular é uma sequência de caracteres usada para corresponder a padrões em strings. No Survey123, se o padrão corresponder, a expressão retornará verdadeiro, caso contrário, se o padrão não corresponder, a expressão retornará falso.
Uma expressão regular pode ser construída a partir de sub expressões listadas na tabela seguinte:
| Subexpressão | Combinar |
|---|---|
| ^ | Corresponde ao começo da linha. |
| $ | Corresponde ao final da linha. |
| . | Corresponde à qualquer caractere único exceto uma nova linha. |
| [...] | Corresponde qualquer caractere único em parênteses. |
| [^...] | Corresponde qualquer caractere único não em parênteses. |
| (re) | Agrupa expressões regulares e lembra o texto correspondente. |
| (?: re) | Agrupa expressões regulares sem lembrar do texto correspondido. |
| a| b | Corresponde a ou b. |
| \A | Começo da string inteira. |
| \b | Corresponde aos limites da palavra quando estiver fora dos colchetes e corresponde ao backspace (0x08) quando estiver dentro dos colchetes. |
| \B | Corresponde limites sem palavra. |
| \d | Corresponde dígitos. É equivalente a [0 até 9]. |
| \D | Corresponde não dígitos. |
| \G | Corresponde ao ponto onde a última correspondência terminou. |
| \n, \t, \e, e assim por diante | Corresponde à nova linha, guia, escape e assim por diante. |
| \N | Referência anterior para capturar o número do grupo N. |
| re* | Corresponde a 0 ou mais ocorrências da expressão precedente. |
| re+ | Corresponde a 1 ou mais ocorrências da expressão precedente. |
| re? | Corresponde a 0 ou 1 ocorrência da expressão precedente. |
| re{ n} | Corresponde ao número exato de ocorrências da expressão anterior definida no local de n. |
| re{ n,} | Corresponde a n ou mais ocorrências da expressão precedente. |
| re{ n, m} | Corresponde a pelo menos ao número de ocorrências definidas por n, e no máximo, definidas por m na expressão precedente. |
| \s | Corresponde a um caractere de espaço em branco: guia, feed de linha, feed de formulário, quebra de linha ou espaço. |
| \S | Corresponde não espaço em branco. |
| \w | Corresponde caracteres de palavra. |
| \W | Corresponde caracteres sim palavra. |
| \z | Final da string inteira. |
| \Z | Final da string inteira, exceto pelo terminador de linha final permitido. |
Você pode usar expressões regulares em qualquer coluna que aceite expressões para alterar o comportamento de uma pergunta, a menos que a string fornecida por outra pergunta esteja em um determinado formato. O exemplo a seguir, quando colocado na coluna relevante, exibe apenas uma pergunta se outra pergunta tiver sido respondida apenas com letras:
regex(${question},'[A-Za-z]')
O exemplo a seguir, quando colocado na coluna choice_filter de uma pergunta select_one para nomes de ruas, mostrará apenas as opções de ruas contidas na lista citystreets que corresponde ao nome da cidade selecionada em uma pergunta anterior denominada city:
regex(citystreets,${city})
Para obter mais exemplos de como usar uma expressão regular para adicionar uma restrição a uma pergunta da pesquisa, consulte Fórmulas
Expressões condicionais
Uma expressão condicional é usada para determinar se uma declaração (condição) retorna verdadeiro ou falso e para retornar um valor indicado para cada caso, como segue:
if(condition, value if true, value if false)
No exemplo abaixo, se a resposta de question_one for sim, a resposta para as perguntas atuais também será sim. Se a resposta de question_one não for sim, a resposta para a pergunta atual será não:
if(selected(${question_one}, 'yes'), 'yes', 'no')
Duas perguntas podem ser usadas em uma condição. No exemplo a seguir, se a resposta para ambas as perguntas question_one e question_two for sim, então a resposta para a pergunta atual será sim:
if(selected(${question_one}, 'yes') and selected(${question_two}, 'yes'), 'yes', 'no')
No exemplo a seguir, se a resposta para ambas as perguntas question_one e question_two for sim, a resposta para a pergunta atual será sim:
if(selected(${question_one}, 'yes') or selected(${question_two}, 'yes'), 'yes', 'no')
Expressões condicionais também podem ser aninhadas, mas é importante sempre incluir um valor para os casos verdadeiro e falso. No exemplo abaixo, se a resposta de question_one não for sim, question_two será avaliado. Se question_twotambém não for sim, question_three será avaliado Se as respostas de question_one, question_two e question_three não forem sim, a resposta para a pergunta que usa esta afirmação será não.
if(selected(${question_one}, 'yes'), 'yes', if(selected(${question_two}, 'yes'), 'yes', if(selected(${question_three}, 'yes'), 'yes', 'no')))