2014-09-19 93 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" ]. 
相关问题