Skip to content

The doc of str.isalnum() should only say c.isalpha() and c.isnumeric() without c.isdecimal() and c.isdigit() #137262

@hyperkai

Description

@hyperkai

The doc of str.isalnum() says c.isalpha(), c.isdecimal(), c.isdigit() and c.isnumeric() as shown below:

... A character c is alphanumeric if one of the following returns True: c.isalpha(), c.isdecimal(), c.isdigit(), or c.isnumeric().

But, according to my experiments below, str.isalnum() is the combination of str.isalpha() and str.isnumeric() so the doc of str.isalnum() should only say c.isalpha() and c.isnumeric() without c.isdecimal() and c.isdigit() as shown below:

... A character c is alphanumeric if one of the following returns True: c.isalpha() or c.isnumeric().

def my_isalnum(s):
    if s == "":
        return False

    for c in s:
        if not c.isalpha() and not c.isnumeric():
            return False
    return True

print('Python3'.isalnum(), my_isalnum('Python3'))
# True True

print('Python 3'.isalnum(), my_isalnum('Python 3'))
print(''.isalnum(), my_isalnum(''))
# False False

print('12345'.isalnum(), my_isalnum('12345'))         # Lowercase Arabic Numeral
print('12345'.isalnum(), my_isalnum('12345')) # Uppercase Arabic Numeral
print('١٢٣٤٥'.isalnum(), my_isalnum('١٢٣٤٥'))         # 12345 (Eastern Arabic Numeral)
print('¹²³⁴⁵'.isalnum(), my_isalnum('¹²³⁴⁵'))         # 12345 (Superscript Arabic Numeral)
print('₁₂₃₄₅'.isalnum(), my_isalnum('₁₂₃₄₅'))         # 12345 (Subscript Arabic Numeral)
print('ⅻ'.isalnum(), my_isalnum('ⅻ'))               # 12 (Lowercase Roman Numeral)
print('Ⅻ'.isalnum(), my_isalnum('Ⅻ'))              # 12 (Uppercase Roman Numeral)
print('xii'.isalnum(), my_isalnum('xii'))             # 12 (Lowercase Alphabet)
print('XII'.isalnum(), my_isalnum('XII'))             # 12 (Uppercase Alphabet)
print('十二'.isalnum(), isalnum('十二'))               # 12 (Japanese Kanji Numeral)
print('壱弐'.isalnum(), my_isalnum('壱弐'))            # 12 (Japanese Kanji Numeral)
print('0b1100'.isalnum(), my_isalnum('0b1100'))       # 12 (Binary)
print('0o14'.isalnum(), my_isalnum('0o14'))           # 12 (Octal)
print('0xc'.isalnum(), my_isalnum('0xc'))             # 12 (Hexadecimal)
# True True

print('-12345'.isalnum(), my_isalnum('-12345'))
print('1 2 3 4 5'.isalnum(), my_isalnum('1 2 3 4 5')) # With spaces
print('1.2345'.isalnum(), my_isalnum('1.2345'))
print('1,2345'.isalnum(), my_isalnum('1,2345'))
print('1.23+4.5j'.isalnum(), my_isalnum('1.23+4.5j'))
print(''.isalnum(), my_isalnum(''))
# False False

# Extra
print('①②③④⑤'.isalnum(), my_isalnum('①②③④⑤'))
print('⓵⓶⓷⓸⓹'.isalnum(), my_isalnum('⓵⓶⓷⓸⓹'))
print('❶❷❸❹❺'.isalnum(), my_isalnum('❶❷❸❹❺'))
print('➊➋➌➍➎'.isalnum(), my_isalnum('➊➋➌➍➎'))
print('⑴⑵⑶⑷⑸'.isalnum(), my_isalnum('⑴⑵⑶⑷⑸'))
print('⒈⒉⒊⒋⒌'.isalnum(), my_isalnum('⒈⒉⒊⒋⒌'))
# True True

print('1⃣2⃣3⃣4⃣5⃣'.isalnum(), my_isalnum('1⃣2⃣3⃣4⃣5⃣'))
# False False

Metadata

Metadata

Assignees

No one assigned

    Labels

    docsDocumentation in the Doc dirinvalid

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions