Expressões de formulário

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ãoCombinar

^

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')))