उपयोगकर्ता इनपुट को पूर्णांक के रूप में कैसे मान्य किया जाए, फिर पुष्टि करें कि पूर्णांक Apple स्क्रिप्ट का उपयोग करके एक विशिष्ट लंबाई है


0

मैं प्रॉम्प्ट बॉक्स के माध्यम से उपयोगकर्ता से इनपुट प्राप्त करने और प्राप्त करने के लिए एक Apple स्क्रिप्ट का निर्माण कर रहा हूं। संवाद का डिफ़ॉल्ट उत्तर "कोड दर्ज करें" है। आवश्यक इनपुट प्रत्येक उपयोगकर्ता को दिया गया 6-अंकीय कोड है। उपयोगकर्ता के इनपुट (या कोड) प्राप्त करने पर, कुछ सत्यापन जांचों की पुष्टि करने की आवश्यकता है कि निम्नलिखित स्थितियों के आधार पर उपयोगकर्ता का इनपुट स्वीकार्य है:

  1. उपयोगकर्ता पत्र या प्रतीक दर्ज नहीं कर सकते।

  2. इनपुट एक पूर्णांक में होना चाहिए (केवल पूर्ण संख्या में, और हां शून्य मायने रखता है)।

  3. कोड (इनपुट), ठीक 6 अंकों के लंबे (या बराबर) होना चाहिए। 6 से कम या अधिक नहीं।

पृष्ठभूमि - उपयोगकर्ता का कोड किसी अन्य एप्लिकेशन से तदर्थ उत्पन्न होता है और हर बार अद्वितीय होता है। इस कोड के संदर्भ को पार करने का कोई तरीका नहीं है।


उदाहरण के लिए, उपयोगकर्ता डायलॉग बॉक्स में 123456 दर्ज करता है। Apple स्क्रिप्ट का उपयोग करते हुए, मैं इसे कैसे स्क्रिप्ट कर सकता हूं, फिर से सुनिश्चित करना, कि कोड सभी संख्याएं हैं, और ठीक 6 अंक लंबा है?


आपने सत्यापन करने का प्रयास करने के लिए ऑटोमेकर के साथ क्या प्रयोग किया है, लेकिन यह विफल हो गया है?
IconDaemon

यदि कोड 0 से शुरू होता है तो क्या होगा?
Mark

मूल रूप से इस कोड का संख्यात्मक प्रकारों से कोई लेना-देना नहीं है। स्ट्रिंग की जांच करें 6 अक्षर हैं और उनमें से प्रत्येक 0-9 की सीमा में है। इस मामले में एक रेगेक्स समस्याओं को नहीं जोड़ सकता है।
Mark

जवाबों:


1

समाधान 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)

समाधान 2:

यह समाधान बेहद कम होने से लाभ पहुंचाता है, लेकिन इस समस्या का भी इलाज करता है क्योंकि इसका इलाज किया जाना चाहिए। यह कहना गलत है कि आप चाहते हैं "उपयोगकर्ता इनपुट को पूर्णांक के रूप में मान्य करें" , जब, वास्तव में, हम केवल पाठ के साथ काम कर रहे हैं। पासकोड एक 6-वर्ण पासकोड है, और वे वर्ण यूनिकोड मूल्यों तक सीमित हैं जो अंकों का प्रतिनिधित्व करते हैं; लेकिन वे अभी भी पाठ वर्ण हैं, और किसी भी संख्यात्मक अर्थ में पूर्णांक नहीं हैं।

निशान सवाल के खिलाफ टिप्पणी वास्तव में यह कहा गया है, लेकिन मैं भी संख्या के रूप में इनपुट का आकलन करने की इच्छा की मानसिकता में गिर गया, जो आंशिक रूप से है Solution 1 ऊपर करता है; और यह काम करता है, और यह एक पूरी तरह से अच्छा समाधान है, लेकिन अंतिम परिणाम प्राप्त करने के लिए यह अनावश्यक कदम उठाता है।

शुद्ध रूप से इनपुट को पाठ के रूप में व्यवहार करना, समस्या, इसलिए संक्षेप में कहा गया है निशान को है "स्ट्रिंग की जांच करें 6 अक्षर और उनमें से प्रत्येक 0-9 की सीमा में है।" तो बस यही एक समाधान है, एक सरल लाइन में:

set input to "123456"

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

चर validation मान्य होने पर या तो 6 अंकों का कोड होगा, या "Invalid input" अन्यथा।


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

क्या यह एक हस्ताक्षर और दशमलव बिंदु की अनुमति देता है?
Mark

@मार्क ऊप्स ..... फिक्सिंग
JBis

जैसा कि @Mark ने कहा, यदि कोड एक शून्य से शुरू होता है तो क्या होगा? सत्यापन विफल हो जाएगा, यह नहीं होगा?
The Terminaltor

@ TheTerminaltor निश्चित।
JBis

1
अच्छा सवाल, शायद एक से अधिक समाधान के साथ। लेकिन मुझे लगता है कि पहला चेक महत्वपूर्ण रूप से इनपुट की लंबाई है; और अंतिम (या अंतिम में से एक) जाँच यह है कि यह एक संख्या के लिए जुटता है। इसके अलावा, यदि एक चेक विफल हो जाता है, तो शेष चेक बहुत ही कम हो जाते हैं; हालाँकि, यदि आपका कोड किसी संख्या के साथ ज़बरदस्ती करने में विफल रहता है, तो यह अन्य मानदंडों की जाँच जारी रखता है (हालाँकि मैं मानता हूँ कि ऐसी स्थितियाँ हो सकती हैं जहाँ यह उपयोगी होगा, अर्थात् यदि हम उपयोगकर्ता के इनपुट में पाई गई सभी त्रुटियों का टूटना जानना चाहते हैं)।
CJK
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.