2014-09-19 101 views
3

所以基本上我有一些輸入可能性的用戶應該只有數字被接受,否則用戶會被警告他的輸入是不正確的。Smalltalk:如何檢查一個字符串只包含數字?

當我使用回調將其讀入時,輸入被視爲字符串。 現在我想檢查字符串(哪些應該包含數字)實際上只包含數字,但我沒有找到已經實現的解決方案。 我試圖

theString isInteger 

-is從不爲字符串

theString asNumber 

真 - 忽略的信件,但我希望有閹字母清晰的輸出都包含在字符串中或不

theString isNumber 

- 始終爲假

回答

3

您可以使用正則表達式來檢查字符串c ontains只有數字:

theString matchesRegex: '\d+' 

或更復雜的正則表達式中,也允許一個可選的符號和小數點:

theString matchesRegex: '-?\\d+(\\.\\d+)?' 
9

在佳樂和菲羅,你有消息#isAllDigits,你想要做什麼:

'1233248539487523' isAllDigits "--> true" 
+1

'#isAllDigits'可能是速度甚至比使用正則表達式,因爲只有少數的消息發送參與,其中一些可以由編譯器內聯也有。另一方面,正則表達式需要首先進行初始化,然後正則表達式檢查會運行很多代碼。 – 2014-09-19 13:53:41

1

不幸的是,我無法找到的消息 'isAllDigits' 或Cincom Smalltalk 'matchesRegex'。 但是,您可以做的是從字符串中提取一個單詞,並使用asNumber將其轉換爲數字。 因此,如果返回的值是0(zero)這意味着number實際上是0(可以使用附加條件進行檢查),或者string不包含digit/number

1

這應該與許多Smalltalks方言的工作:

(aString detect: [:c| c isDigit not ]) isNil ifTrue: [ "it's a number" ]. 
相關問題