Come convalidare l'input dell'utente come numero intero, quindi confermare che l'intero è una lunghezza specifica usando Apple Script

0

Sto costruendo uno script Apple per richiedere e ricevere input da un utente tramite una finestra di dialogo. La risposta predefinita della finestra di dialogo è "Inserisci codice". L'input richiesto è un codice a 6 cifre assegnato a ciascun utente. Alla ricezione dell'input dell'utente (o del codice), è necessario verificare alcuni controlli di convalida che confermino che l'input dell'utente è accettabile in base alle seguenti condizioni:

  1. L'utente non può inserire lettere o simboli.

  2. L'input deve essere in un numero intero (solo numeri interi e zero conteggi).

  3. Il codice (input), deve essere esattamente (o uguale a) di 6 cifre. Non più o non meno di 6.

Sfondo : il codice dell'utente viene generato ad-hoc da un'altra applicazione ed è unico ogni volta. Non c'è modo di fare riferimento a questo codice.

Ad esempio, l'utente inserisce 123456 nella finestra di dialogo. Usando Apple Script, come posso scrivere questo script, assicurandoti di nuovo che il codice è tutti i numeri e precisamente 6 cifre?

    
posta The Terminaltor 31.07.2018 - 18:14
fonte

2 risposte

1

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

Soluzione 2:

Questa soluzione trae beneficio dall'essere estremamente breve, ma tratta anche il problema come dovrebbe essere trattato. È un termine improprio dire che desideri "convalidare l'input dell'utente come intero" , quando, in realtà, abbiamo sempre a che fare solo con il testo. Il passcode è un passcode di 6 caratteri, e quei caratteri sono limitati ai valori unicode che rappresentano le cifre; ma sono ancora caratteri di testo e non interi in senso numerico.

Contrassegna il commento di contro la domanda in realtà affermata, ma anche io sono caduto nella mentalità di voler valuta l'input come numeri, che è in parte ciò che fa Solution 1 ; e funziona, ed è una soluzione perfetta, ma esegue passaggi inutili per raggiungere il risultato finale.

Trattando l'input esclusivamente come testo, il problema, così sinteticamente affermato da Contrassegna è " Controlla che la stringa sia di 6 caratteri e ognuno di questi si trovi nell'intervallo 0-9. " Quindi questo è esattamente ciò che questa soluzione fa, in una linea semplice:

set input to "123456"

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

La variabile validation conterrà il codice a 6 cifre se è valido o "Invalid input" altrimenti.

    
risposta data 01.08.2018 - 03:37
fonte
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
    
risposta data 31.07.2018 - 18:54
fonte

Leggi altre domande sui tag