Feng_Tien
(Feng Tien)
2 November 2007 04:47
1
alright, this seems easy enough.
Building a Bank class, deposits must be floating, so if it has any
letters, it will tell the user it needs numbers
if amount == /^[0-9]$/
deposit_to_acct(amount,current_account)
puts 'You have deposited ' + amount.to_s
else
puts 'Must be a number, alphabet bank is next door to your
right'
end
it goes straight to the else statement, never executes the
deposit_to_acct method.
What part am I doing wrong?
···
--
Posted via http://www.ruby-forum.com/ .
7stud
(7stud --)
2 November 2007 05:05
2
Feng Tien wrote:
alright, this seems easy enough.
Building a Bank class, deposits must be floating, so if it has any
letters, it will tell the user it needs numbers
if amount == /^[0-9]$/
deposit_to_acct(amount,current_account)
puts 'You have deposited ' + amount.to_s
else
puts 'Must be a number, alphabet bank is next door to your
right'
end
1) The pattern /^[0-9]$/ matches one digit.
2) amount would have to be a regex object to == the regex on the right.
if 'abc' == /abc/
puts 'yes'
else
puts 'no'
end
regex_obj = /abc/
if regex_obj == /abc/
puts 'yes'
else
puts 'no'
end
--output:--
no
yes
···
--
Posted via http://www.ruby-forum.com/\ .
I would say that you need a better understanding of regular expressions and how they are matched to strings in Ruby. The expression
amount == /^[0-9]$/
is an equality test and will always be false if 'amount' is a string. Consider the following examples:
<code>
# the following perform equality tests, not string to regular expression matching
123 == /^[0-9]$/ # => false
'123' == /^[0-9]$/ # => false
/^[0-9]$/ == /^[0-9]$/ # => true
/^[0-9]$/.equal?(/^[0-9]$/ )# => false
# the following perform regular expression matching
'123' =~ /^[0-9]$/ # => nil (match fails because RE only accepts one digit)
'3' =~ /^[0-9]$/ # => 0 (match succeeds)
'123' =~ /^[0-9]+$/ # => 0 (match succeeds)
'123X' =~ /^[0-9]+$/ # => nil (match fails)
</code>
Regards, Morton
···
On Nov 2, 2007, at 12:47 AM, Feng Tien wrote:
Building a Bank class, deposits must be floating, so if it has any
letters, it will tell the user it needs numbers
if amount == /^[0-9]$/
deposit_to_acct(amount,current_account)
puts 'You have deposited ' + amount.to_s
else
puts 'Must be a number, alphabet bank is next door to your
right'
end
it goes straight to the else statement, never executes the
deposit_to_acct method.
What part am I doing wrong?
7stud
(7stud --)
2 November 2007 05:34
4
7stud -- wrote:
Feng Tien wrote:
alright, this seems easy enough.
Building a Bank class, deposits must be floating, so if it has any
letters, it will tell the user it needs numbers
if amount == /^[0-9]$/
deposit_to_acct(amount,current_account)
puts 'You have deposited ' + amount.to_s
else
puts 'Must be a number, alphabet bank is next door to your
right'
end
1) The pattern /^[0-9]$/ matches one digit.
That's incorrect. The pattern matches: the start of the line, followed
by one digit, followed by the end of the line. So the regex won't
match a digit in a line containing two digits:
regex = /^[0-9]$/
line = '8'
match_obj = regex.match(line)
p match_obj.to_a
line = '12'
match_obj = regex.match(line)
p match_obj.to_a
--output:--
["8"]
You certainly don't have to use regex's to convert a string to a float
(or an int). Look at String#to_f and Kernel.Float.
···
--
Posted via http://www.ruby-forum.com/\ .