0 votos

Cómo validar entradas del usuario como número entero, luego confirmar integer es una longitud específica usando Apple Script

Estoy construyendo una Manzana Script para solicitar y recibir información de un usuario a través de un cuadro de diálogo. La respuesta por defecto del cuadro de diálogo "Introducir Código". La entrada requerida es un código de 6 dígitos que se dará a cada usuario. Al recibir la entrada del usuario (o código), algunas de las comprobaciones de validación de la necesidad de ocurrir, lo que confirma que la entrada del usuario es aceptable basado en las siguientes condiciones:

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

  2. De entrada debe ser un entero (sólo números enteros, y sí cero de la cuenta).

  3. El código (de entrada), acaba de ser exactamente (o igual a) 6 dígitos de largo. Ni más ni menos que 6.

Antecedentes - el código de usuario se genera ad-hoc desde otra aplicación y es único cada vez. No hay manera de referencia cruzada de este código.


Por ejemplo, el usuario entra en 123456 en el cuadro de diálogo. El uso de Apple Script, ¿cómo puedo guión de esta, asegurando de nuevo, que el código de todos los números, y la precisión de 6 dígitos?

1voto

qarma Puntos 71

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 beneficios de ser muy corto, pero también trata el problema como debe ser tratado. Es un eufemismo para decir que deseo para "validar la entrada del usuario como número entero", cuando, en realidad, no sólo se trata de un texto. El código de acceso es una de 6 caracteres del código, y los personajes están limitadas a los valores unicode que representan los dígitos; pero todavía son caracteres de texto, y no enteros en cualquier sentido numérico.

La marca's comentario en contra de la pregunta realmente dijo esto, pero hasta que caí en la mentalidad de querer evaluar la entrada de números, que es parte de lo Solution 1 por encima de hace; y funciona, y es una perfectamente buena solución, pero se realiza huelga pasos para obtener el resultado final.

El tratamiento de la entrada únicamente como texto, el problema, así planteado por la Marca es "Comprobar la cadena es de 6 caracteres y cada uno de ellos está en el rango de 0-9." Así que eso es exactamente lo que esta solución no hace, en una simple línea:

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" lo contrario.

0voto

Pirooz Puntos 486
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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X