topchef
topchef

Reputation: 19823

Checking if string is in uppercase in R

Is there simpler method to match regex pattern in its entirety? For example, to check if given string is uppercase the following 2 methods but seem too complex. Checking stringr I found no indication for simpler solution either.

Method 1:

isUpperMethod1 <- function(s) {
  return (all(grepl("[[:upper:]]", strsplit(s, "")[[1]])))
}

Method 2:

isUpperMethod2 <- function(s) {
  m = regexpr("[[:upper:]]+", s)
  return (regmatches(s, m) == s)
}

I intentionally omit handling of empty, NA, NULL strings to avoid bloated code.

The uppercase pattern can be generalized to arbitrarily regex pattern (or character set).

I see no problems with both solutions above except that they seem excessively complex for the problem solved.

Upvotes: 28

Views: 25551

Answers (3)

flies
flies

Reputation: 2155

If you prefer to live in the tidyverse, here's the version using stringr:

library(stringr)
str_detect(s, "^[:upper:]+$")

Upvotes: 12

Michael Kelly
Michael Kelly

Reputation: 201

Why not just test if the word is identical to itself when converted to upper case with the "toupper" function?

word1 <- "TEST"
word1 == toupper(word1) 

will be TRUE

Upvotes: 20

Matthew Plourde
Matthew Plourde

Reputation: 44634

You can use the ^ and $ patterns to match the beginning and end of the string

grepl("^[[:upper:]]+$", s)

Upvotes: 41

Related Questions