Skip to content

Controllare se una stringa è numerica, alfabetica, alfanumerica o ASCII

Python

Python fornisce metodi per verificare se tutti i caratteri nella stringa sono numerici, alfabetici, alfanumerici o ASCII.

In questo articolo vengono descritti i seguenti contenuti.

  • Controlla se una stringa contiene solo decimali:str.isdecimal()
  • Controlla se una stringa contiene solo cifre:str.isdigit()
  • Controlla se una stringa contiene solo numeri:str.isnumeric()
  • Controlla se una stringa contiene solo alfabetico:str.isalpha()
  • Verifica se una stringa contiene solo caratteri alfanumerici:str.isalnum()
  • Controlla se una stringa contiene solo ASCII:str.isascii()
  • Controlla se una stringa è vuota
  • Controlla se una stringa è un numero (= può essere convertito in valore numerico)

Per metodi diversi da isascii(), le stringhe simboli vuoti e le stringhe contenenti (,, ., -, ecc.) restituiscono False. L’ultima sezione come descrivere -1.23, ad esempio, è un valore numerico.

Vedere l’articolo seguente per come presentare una stringa str in numeri int e float.

Controlla se una stringa contiene solo decimali:str.isdecimal()

isdecimal() restituisce True se tutti i sono decimali nella categoria Unicode Nd. Anche i numeri a larghezza intera CJK sono determinati come True.

s = '1234567890'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

s = '1234567890'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

Una stringa contenente simboli come – e . è determinato ad essere falso.

s = '-1.23'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False

Se si desidera una stringa come ‘-1.23’ come numero, è possibile utilizzare la gestione delle eccezioni. È nell’ultima sezione.

Controlla se una stringa contiene solo cifre:str.isdigit()

isdigit() restituisce True non solo per i caratteri che sono True con isdecimal() ma anche per il cui valore della proprietà Unicode Numeric_Type è Digit o Decimal.

Ad esempio, il numero in apice ² (‘u00B2’) è False in isdecimal(), ma True in isdigit().

s = '10u00B2'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True

Controlla se una stringa contiene solo numeri:str.isnumeric()

isnumeric() contiene True non solo per le caratteristiche che sono True con isdigit() ma anche per il cui valore della Unicode Numeric_Type è Numeric.

Anche le frazioni volgari, i numeri romani, i numeri cinesi, ecc. sono determinati come veri.

s = 'u00BD'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True

s = 'u2166'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '一二三四五六七八九〇'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True

Controlla se una stringa contiene solo alfabetico:str.isalpha()

isalpha() nella contiene True se tutti i caratteri sono alfabetici. I caratteri alfabetici sono quelli definiti nel database dei caratteri Unicode come Letter, ovvero quelli con la proprietà categoria di generale tra Lm, Lt, Lu, Ll o Lo.

Non solo l’alfabeto latino, ma anche i caratteri di altre lingue, come l’hiragana giapponese, sono determinati come True.

s = 'abc'
print('s=", s)
print("isalpha:', s.isalpha())
# s = abc
# isalpha: True

s = 'あいうえお'
print('s=", s)
print("isalpha:', s.isalpha())
# s = あいうえお
# isalpha: True

Verifica se una stringa contiene solo caratteri alfanumerici:str.isalnum()

isalnum() restituisce True se ogni carattere è True con uno dei metodi elencati finora, isdecimal(), isdigit(), isnumeric() e isalpha().

Poiché ogni carattere viene valutato individualmente, una stringa contenente alfabetici e numerici viene determinato come True in isalnum() anche se False in tutti gli altri metodi.

s = 'abc123'
print('s=", s)
print("isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False

Controlla se una stringa contiene solo ASCII:str.isascii()

In Python 3.7 è stato aggiunto isascii(). isascii nella caratteri() contiene True se tutti i caratteri sono ASCII (U+0000 – U+007F).

Anche simboli come + e – sono determinati come True.

s = 'abc123+-,.&'
print('s=", s)
print("isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False

Hiragana, ecc., che non sono ASCII, sono determinati come Falsi.

s = 'あいうえお'
print('s=", s)
print("isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True

A differenza degli altri metodi, isascii() restituisce True anche per stringhe vuote, come spiegato di seguito.

Controlla se una stringa è vuota

La stringa vuota ӏ determinata come True da isascii() e come False da altri metodi.

s = ''
print('s=", s)
print("isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = 
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

Usa bool() per verificare se una stringa è vuota o meno. Restituisce False per una stringa vuota e True per le altre.

print(bool(''))
# False

print(bool('abc123'))
# True

Controlla se una stringa è un numero (= può essere convertito in valore numerico)

Un numero negativo o un valore decimale contiene. o -, quindi sono determinati come False per metodi diversi da isascii().

for isascii() restituisca True, non è adatto per verificare se una stringa è un numero (= può essere convertito in un valore numerico), perché viene anche se sono inclusi altri simboli o alfabeti.

s = '-1.23'
print('s=", s)
print("isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

Una stringa str può essere convertita in un numero in virgola mobile con float(). Viene generato un errore per le stringhe che non possono essere convertite in numeri.

print(float('-1.23'))
# -1.23

print(type(float('-1.23')))
# <class 'float'>

# print(float('abc'))
# ValueError: could not convert string to float: 'abc'

Con la gestione delle eccezioni, puoi definire una funzione che arriva True quando una stringa può essere convertita con float().

def is_num(s):
    try:
        float(s)
    except ValueError:
        return False
    else:
        return True

print(is_num('123'))
# True

print(is_num('-1.23'))
# True

print(is_num('+1.23e10'))
# True

print(is_num('abc'))
# False

print(is_num('10,000,000'))
# False

Se vuoi sostituire la stringa contenente il separatore del gruppo di cifre come True, usa replace() per rimuoverli sostituendo , con la stringa vuota ”.

def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter('10,000,000'))
# True

Puoi anche usare replace() per i separatori di spazi bianchi.

def is_num_delimiter2(s):
    try:
        float(s.replace(',', '').replace(' ', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter2('10,000,000'))
# True

print(is_num_delimiter2('10 000 000'))
# True

Se vuoi controllare se un numero è intero o decimale, consulta il seguente articolo.