The str.isnumeric() method returns True if all characters in a string are classified as numeric characters under the Unicode standard, and the string contains at least one character. Otherwise, it returns False.
Key Distinction: isnumeric() is the broadest numeric check in Python—it accepts not only standard digits (0–9), but also Unicode superscript/subscript digits, vulgar fractions (e.g., ½, ¾), Roman numerals (e.g., Ⅳ), and Chinese/CJK numeric characters.
string.isnumeric()
| Parameter | Type | Description |
|---|---|---|
| None | — | Takes no arguments. Called directly on any string instance. |
| Return Value | bool |
Returns True if all characters are numeric and the string is non-empty; returns False otherwise. |
Standard ASCII digits return True. Any non-numeric characters—including letters, spaces, hyphens, and decimal points—cause isnumeric() to return False:
# 1. Pure ASCII digits
s1 = "1234"
print(f"\'{s1}\'.isnumeric():", s1.isnumeric())
# 2. String containing letters and underscore
s2 = "abc_45"
print(f"\'{s2}\'.isnumeric():", s2.isnumeric())
# 3. String containing symbols (#)
s3 = "1234#56"
print(f"\'{s3}\'.isnumeric():", s3.isnumeric())
# 4. Decimal point (period is punctuation, not numeric)
s4 = "12.34"
print(f"\'{s4}\'.isnumeric():", s4.isnumeric())
# 5. Empty string
s5 = ""
print(f"Empty string.isnumeric():", s5.isnumeric())
Output:
'1234'.isnumeric(): True
'abc_45'.isnumeric(): False
'1234#56'.isnumeric(): False
'12.34'.isnumeric(): False
Empty string.isnumeric(): False
Under the Unicode standard, characters with the general category property Numeric_Type=Digit, Numeric_Type=Decimal, or Numeric_Type=Numeric all qualify as numeric:
# 1. Superscripts and subscripts
sup = "2²"
print(f"\'{sup}\'.isnumeric():", sup.isnumeric()) # True
# 2. Vulgar fractions
frac = "½"
print(f"\'{frac}\'.isnumeric():", frac.isnumeric()) # True
# 3. Unicode Roman numerals (e.g., \u2163 = Ⅳ / Roman numeral 4)
roman = "\u2163"
print(f"\'{roman}\'.isnumeric():", roman.isnumeric()) # True
# 4. Chinese / CJK numerals (一千二百三十四 = 1234)
chinese = "一千二百三十四"
print(f"\'{chinese}\'.isnumeric():", chinese.isnumeric()) # True
Python provides three related string validation methods that form a strict hierarchy of inclusion:
isdecimal() ⊆ isdigit() ⊆ isnumeric()
| String Input | Description | isdecimal() | isdigit() | isnumeric() |
|---|---|---|---|---|
"123" | Standard ASCII digits | ✔ True | ✔ True | ✔ True |
"2²" | Superscript exponent | ✘ False | ✔ True | ✔ True |
"½" | Vulgar fraction | ✘ False | ✘ False | ✔ True |
"Ⅳ" (\u2163) | Roman numeral | ✘ False | ✘ False | ✔ True |
"一千二百三十四" | Chinese numerals | ✘ False | ✘ False | ✔ True |
"-123" | Negative integer | ✘ False | ✘ False | ✘ False |
"12.34" | Floating point | ✘ False | ✘ False | ✘ False |
"" | Empty string | ✘ False | ✘ False | ✘ False |
A frequent beginner mistake is expecting "-50".isnumeric() or "3.14".isnumeric() to return True. In Python, the hyphen (-) and decimal point (.) are punctuation symbols, not numeric characters. If a string contains either symbol, isnumeric() evaluates to False.
To safely validate user input that may include positive/negative signs or decimals, combine string operations with exception handling:
def is_signed_integer(val: str) -> bool:
# Strip optional leading + or - sign
if val.startswith(("+", "-")):
return val[1:].isnumeric() and len(val) > 1
return val.isnumeric()
def is_valid_float(val: str) -> bool:
try:
float(val)
return True
except ValueError:
return False
# Verification
print("is_signed_integer(\'-450\'):", is_signed_integer("-450")) # True
print("is_valid_float(\'-45.67\'):", is_valid_float("-45.67")) # True
Write an input sanitization function filter_numeric_tokens(tokens) that takes a list of mixed strings, filters for tokens that pass isnumeric(), and verifies the output with Python assertions:
raw_tokens = ["100", "2²", "abc", "½", "-50", "3.14", "999"]
# Filter tokens where isnumeric() evaluates to True
numeric_tokens = [tok for tok in raw_tokens if tok.isnumeric()]
assert numeric_tokens == ["100", "2²", "½", "999"]
assert "-50" not in numeric_tokens
print("Extracted Numeric Tokens:", numeric_tokens)
print("All assertions verified successfully!")
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.