---
name: "islower_l"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/isalpha"
---

# islower\_l(3)

character classification functions

Part of [isalpha(3)](/isalpha/3.md).

## NAME

isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit, isalnum\_l, isalpha\_l, isascii\_l, isblank\_l, iscntrl\_l, isdigit\_l, isgraph\_l, islower\_l, isprint\_l, ispunct\_l, isspace\_l, isupper\_l, isxdigit\_l - character classification functions

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <ctype.h>
```

**int isalnum(int** *c***);** **int isalpha(int** *c***);** **int iscntrl(int** *c***);** **int isdigit(int** *c***);** **int isgraph(int** *c***);** **int islower(int** *c***);** **int isprint(int** *c***);** **int ispunct(int** *c***);** **int isspace(int** *c***);** **int isupper(int** *c***);** **int isxdigit(int** *c***);**

**int isascii(int** *c***);** **int isblank(int** *c***);**

**int isalnum\_l(int** *c***, locale\_t** *locale***);** **int isalpha\_l(int** *c***, locale\_t** *locale***);** **int isblank\_l(int** *c***, locale\_t** *locale***);** **int iscntrl\_l(int** *c***, locale\_t** *locale***);** **int isdigit\_l(int** *c***, locale\_t** *locale***);** **int isgraph\_l(int** *c***, locale\_t** *locale***);** **int islower\_l(int** *c***, locale\_t** *locale***);** **int isprint\_l(int** *c***, locale\_t** *locale***);** **int ispunct\_l(int** *c***, locale\_t** *locale***);** **int isspace\_l(int** *c***, locale\_t** *locale***);** **int isupper\_l(int** *c***, locale\_t** *locale***);** **int isxdigit\_l(int** *c***, locale\_t** *locale***);**

**int isascii\_l(int** *c***, locale\_t** *locale***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**isascii**():

```
    _XOPEN_SOURCE
        || /* glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE
```

**isblank**():

```
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
```

**isalnum\_l**(), **isalpha\_l**(), **isblank\_l**(), **iscntrl\_l**(), **isdigit\_l**(), **isgraph\_l**(), **islower\_l**(), **isprint\_l**(), **ispunct\_l**(), **isspace\_l**(), **isupper\_l**(), **isxdigit\_l**():

```
    Since glibc 2.10:
        _XOPEN_SOURCE >= 700
    Before glibc 2.10:
        _GNU_SOURCE
```

**isascii\_l**():

```
    Since glibc 2.10:
        _XOPEN_SOURCE >= 700 && (_SVID_SOURCE || _BSD_SOURCE)
    Before glibc 2.10:
        _GNU_SOURCE
```

## DESCRIPTION

These functions check whether *c*, which must have the value of an *unsigned char* or **EOF**, falls into a certain character class according to the specified locale. The functions without the "\_l" suffix perform the check based on the current locale.

The functions with the "\_l" suffix perform the check based on the locale specified by the locale object *locale*. The behavior of these functions is undefined if *locale* is the special locale object **LC\_GLOBAL\_LOCALE** (see [**duplocale**(3)](/duplocale/3.md)) or is not a valid locale object handle.

The list below explains the operation of the functions without the "\_l" suffix; the functions with the "\_l" suffix differ only in using the locale object *locale* instead of the current locale.

- **isalnum**()

  checks for an alphanumeric character; it is equivalent to *(isalpha(c) \|\| isdigit(c))*.

- **isalpha**()

  checks for an alphabetic character; in the standard **"C"** locale, it is equivalent to *(isupper(c) \|\| islower(c))*. In some locales, there may be additional characters for which **isalpha**() is true—letters which are neither uppercase nor lowercase.

- **isascii**()

  checks whether *c* is a 7-bit *unsigned char* value that fits into the ASCII character set.

- **isblank**()

  checks for a blank character; that is, a space or a tab.

- **iscntrl**()

  checks for a control character.

- **isdigit**()

  checks for a digit (0 through 9).

- **isgraph**()

  checks for any printable character except space.

- **islower**()

  checks for a lowercase character.

- **isprint**()

  checks for any printable character including space.

- **ispunct**()

  checks for any printable character which is not a space or an alphanumeric character.

- **isspace**()

  checks for white-space characters. In the **"C"** and **"POSIX"** locales, these are: space, form-feed (**'\\f'**), newline (**'\\n'**), carriage return (**'\\r'**), horizontal tab (**'\\t'**), and vertical tab (**'\\v'**).

- **isupper**()

  checks for an uppercase letter.

- **isxdigit**()

  checks for hexadecimal digits, that is, one of\
   **0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F**.

## RETURN VALUE

The values returned are nonzero if the character *c* falls into the tested class, and zero if not.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **isalnum**(), **isalpha**(), **isascii**(), **isblank**(), **iscntrl**(), **isdigit**(), **isgraph**(), **islower**(), **isprint**(), **ispunct**(), **isspace**(), **isupper**(), **isxdigit**() | Thread safety | MT-Safe |

## STANDARDS

- **isalnum**() **isalpha**() **iscntrl**() **isdigit**() **isgraph**() **islower**() **isprint**() **ispunct**() **isspace**() **isupper**() **isxdigit**() **isblank**()

  C11, POSIX.1-2008.

- **isascii**() **isalnum\_l**() **isalpha\_l**() **isblank\_l**() **iscntrl\_l**() **isdigit\_l**() **isgraph\_l**() **islower\_l**() **isprint\_l**() **ispunct\_l**() **isspace\_l**() **isupper\_l**() **isxdigit\_l**()

  POSIX.1-2008.

- **isascii\_l**()

  GNU.

## HISTORY

- **isalnum**() **isalpha**() **iscntrl**() **isdigit**() **isgraph**() **islower**() **isprint**() **ispunct**() **isspace**() **isupper**() **isxdigit**()

  C89, POSIX.1-2001.

- **isblank**()

  C99, POSIX.1-2001.

- **isascii**()

  POSIX.1-2001 (XSI).

-

  POSIX.1-2008 marks it as obsolete, noting that it cannot be used portably in a localized application.

- **isalnum\_l**() **isalpha\_l**() **isblank\_l**() **iscntrl\_l**() **isdigit\_l**() **isgraph\_l**() **islower\_l**() **isprint\_l**() **ispunct\_l**() **isspace\_l**() **isupper\_l**() **isxdigit\_l**()

  glibc 2.3. POSIX.1-2008.

- **isascii\_l**()

  glibc 2.3.

## CAVEATS

The standards require that the argument *c* for these functions is either **EOF** or a value that is representable in the type *unsigned char*; otherwise, the behavior is undefined. If the argument *c* is of type *char*, it must be cast to *unsigned char*, as in the following example:

```
char c;
...
res = toupper((unsigned char) c);
```

This is necessary because *char* may be the equivalent of *signed char*, in which case a byte where the top bit is set would be sign extended when converting to *int*, yielding a value that is outside the range of *unsigned char*.

The details of what characters belong to which class depend on the locale. For example, **isupper**() will not recognize an A-umlaut (Ä) as an uppercase letter in the default **C** locale.

## SEE ALSO

[**iswalnum**(3)](/iswalnum/3.md), [**iswalpha**(3)](/iswalpha/3.md), [**iswblank**(3)](/iswblank/3.md), [**iswcntrl**(3)](/iswcntrl/3.md), [**iswdigit**(3)](/iswdigit/3.md), [**iswgraph**(3)](/iswgraph/3.md), [**iswlower**(3)](/iswlower/3.md), [**iswprint**(3)](/iswprint/3.md), [**iswpunct**(3)](/iswpunct/3.md), [**iswspace**(3)](/iswspace/3.md), [**iswupper**(3)](/iswupper/3.md), [**iswxdigit**(3)](/iswxdigit/3.md), [**newlocale**(3)](/newlocale/3.md), [**setlocale**(3)](/setlocale/3.md), [**toascii**(3)](/toascii/3.md), [**tolower**(3)](/tolower/3.md), [**toupper**(3)](/toupper/3.md), [**uselocale**(3)](/uselocale/3.md), [**ascii**(7)](/ascii/7.md), [**locale**(7)](/locale/7.md)
