Cómo validar la entrada del usuario como un entero, luego confirme que el entero es una longitud específica usando Apple Script

0

Estoy creando un Apple Script para solicitar y recibir información de un usuario a través de un cuadro de diálogo. La respuesta predeterminada del cuadro de diálogo es "Introducir código". La entrada requerida es un código de 6 dígitos dado a cada usuario. Al recibir la entrada (o código) del usuario, es necesario que se realicen algunas verificaciones de validación que confirmen que la entrada del usuario es aceptable según las siguientes condiciones:

  1. El usuario no puede ingresar letras o símbolos.

  2. La entrada debe estar en un entero (solo números enteros, y sí, cero).

  3. El código (entrada), solo debe tener exactamente (o igual a) 6 dígitos de longitud. Ni más ni menos que 6.

Fondo : el código del usuario se genera ad-hoc desde otra aplicación y es único cada vez. No hay manera de cruzar este código.

Por ejemplo, el usuario ingresa 123456 en el cuadro de diálogo. Al usar Apple Script, ¿cómo puedo hacer esto, asegurándome de nuevo, que el código es todos los números y que tienen exactamente 6 dígitos?

    
pregunta The Terminaltor 31.07.2018 - 18:14

2 respuestas

1

Solución 1:

set input to "123456"

if the length of the input ≠ 6 ¬
    then return "Wrong number of characters."

try
    if "0123456789" does not contain item 1 of the input ¬
        or item -1 of the input is in [space, tab, linefeed] ¬
        then error

    set input to input as number

    if class of the input ≠ integer then error
on error
    return "Invalid characters."
end try



text -6 thru -1 of ("000000" & the input)

Solución 2:

Esta solución se beneficia de ser extremadamente corta, pero también trata el problema como se debe tratar. Es un nombre inapropiado decir que desea "validar la entrada del usuario como un entero" , cuando, de hecho, solo estamos tratando con texto. El código de acceso es un código de acceso de 6 caracteres, y esos caracteres están limitados a los valores de Unicode que representan dígitos; pero siguen siendo caracteres de texto y no enteros en ningún sentido numérico.

Marque el comentario de en contra de la pregunta en realidad lo dijo, pero incluso caí en la mentalidad de querer evalúe la entrada como números, que es en parte lo que hace Solution 1 anterior; y funciona, y es una solución perfectamente buena, pero realiza pasos innecesarios para llegar al resultado final.

Tratando la entrada simplemente como texto, el problema, tan brevemente declarado por Mark es " Compruebe que la cadena tiene 6 caracteres y cada uno de ellos está en el rango 0-9. " Entonces, eso es exactamente lo que hace esta solución, en una línea simple:

set input to "123456"

set validation to do shell script ¬
    "egrep -x '[0-9]{6}' <<<" & ¬
    quoted form of the input & ¬
    "|| echo Invalid input"

La variable validation contendrá el código de 6 dígitos si es válido, o "Invalid input" de lo contrario.

    
respondido por el CJK 01.08.2018 - 03:37
0
display dialog "Enter Your Code" default answer "" with hidden answer # Ask for user input as dots instead of text
set myCode to the text returned of the result as string # set myCode to what the user enters
set isNum to true # define isNum as true unless changed
try
    set bla to myCode as number # will fail if myCode is not a number
on error
    set isNum to false # failed
end try
set prohibitedChars to {".", " ", "+", "-"}
set myItems to every item of myCode
set containsGoodChars to true
repeat with i in myItems
    if i is in prohibitedChars then
        set containsGoodChars to false
    end if
end repeat
if ((length of myCode is 6) and (isNum) and (containsGoodChars)) then # if myCode is 6 characters long and it is a number then

    --do some code

else # validation failed
    display dialog "You failed. And so did the validation."
end if
    
respondido por el JBis 31.07.2018 - 18:54

Lea otras preguntas en las etiquetas