Use the test() method to check if a string contains only digits, e.g. /^[0-9]+$/. test(str) . The test method will return true if the string contains only digits and false otherwise.
Python String isdigit() The isdigit() method returns True if all characters in a string are digits. If not, it returns False .
You'll want to use the isdigit
method on your str
object:
if len(isbn) == 10 and isbn.isdigit():
From the isdigit
documentation:
str.isdigit()
Return True if all characters in the string are digits and there is at least one character, False otherwise. Digits include decimal characters and digits that need special handling, such as the compatibility superscript digits. This covers digits which cannot be used to form numbers in base 10, like the Kharosthi numbers. Formally, a digit is a character that has the property value Numeric_Type=Digit or Numeric_Type=Decimal.
Use str.isdigit
:
>>> "12345".isdigit()
True
>>> "12345a".isdigit()
False
>>>
Use string isdigit function:
>>> s = '12345'
>>> s.isdigit()
True
>>> s = '1abc'
>>> s.isdigit()
False
You can also use the regex,
import re
eg:-1) word = "3487954"
re.match('^[0-9]*$',word)
eg:-2) word = "3487.954"
re.match('^[0-9\.]*$',word)
eg:-3) word = "3487.954 328"
re.match('^[0-9\.\ ]*$',word)
As you can see all 3 eg means that there is only no in your string. So you can follow the respective solutions given with them.
As pointed out in this comment How do you check in python whether a string contains only numbers? the isdigit()
method is not totally accurate for this use case, because it returns True for some digit-like characters:
>>> "\u2070".isdigit() # unicode escaped 'superscript zero'
True
If this needs to be avoided, the following simple function checks, if all characters in a string are a digit between "0" and "9":
import string
def contains_only_digits(s):
# True for "", "0", "123"
# False for "1.2", "1,2", "-1", "a", "a1"
for ch in s:
if not ch in string.digits:
return False
return True
Used in the example from the question:
if len(isbn) == 10 and contains_only_digits(isbn):
print ("Works")
What about of float numbers, negatives numbers, etc.. All the examples before will be wrong.
Until now I got something like this, but I think it could be a lot better:
'95.95'.replace('.','',1).isdigit()
will return true only if there is one or no '.' in the string of digits.
'9.5.9.5'.replace('.','',1).isdigit()
will return false
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With