SandCastleIcon.png This article has links to websites or programs outside of Scratch and Wikipedia. Remember to stay safe while using the internet, as we cannot guarantee the safety of other websites.
This article or section documents the current version of Scratch (version 3.0). For this article in Scratch 1.4, see Case Sensing (1.4).
An example of case-insensitivity (the () = () block).

Case sensing is the act of distinguishing lowercase letters from uppercase or capital letters.

Case sensing is a more difficult process than in Scratch 1.4 due to more restrictions on what is and is not case-sensitive. In order to accomplish case sensing in Scratch 3.0 and Scratch 2.0, any of a small variety of methods must be employed, usually exploiting the case-sensitivity of the Switch Costume to () block.

Note Note: This article only uses the standard English 26 letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ). More characters may need to be added in some parts of the script to differentiate more letters.

53 Costume Method

Naming costumes in the costume editor is case-sensitive (e.g. A sprite can have a costume named "A" and a costume named "a".), and the blocks in the Switch Costume to () series are also case-sensitive. The scripting method below shows how to set a variable to "upper" or "lower" in accordance with the case of a specified letter. This script is also the most performant of the other methods as it requires no loops. First, the following procedure on the naming of costumes must be done in order for this to work:

  • The very first costume must have the name "null" or any other non-interfering name.
  • Next, beginning with the very first letter of the alphabet, name the next costume "A" (capitalized).
  • The following costume must be named "at" or "a[any other letter]", except the second letter must be consistent throughout all the names.
  • Repeat the second and third steps for the rest of the alphabet. This means the next four costumes are "B", "bt", "C", and "ct". It is finished once the entire alphabet is complete.

After completing the naming of all 53 costumes, make sure they are in order, and proceed to the scripting. The following script uses a custom block to detect if a letter entered into the string input is capitalized or not.

define is uppercase (character)
if <not <(length of (character)) = [1]>> then
    set [case v] to [error!] //indicates that more than one character was entered, or there was no length
    stop [this script v]
end
switch costume to (null v) //it should be the very first costume
switch costume to (character) //if the character is lowercase, it will stay on "null"
if <(costume [number v]) = [1]> then //if the sprite never changed costumes due to the letter being lowercase
    switch costume to (join (character) [t]) //all lowercase costumes end in "t" or ones lettered choice (refer to pattern above)
end
if <(costume [number v]) = [1]> then //if the sprite still has not changed costume
    set [case v] to [other] //indicates that a non-alphabetic character was used
    stop [this script v]
end
if <((costume [number v]) mod (2)) = [0]> then //if the costume is at an interval of "2", meaning it is a capital letter costume
    set [case v] to [upper] //defines that the letter is uppercase
    else
    set [case v] to [lowercase]
end

Two Costume Method

Costumes are case-sensitive, which may be exploited for case sensing. Two costumes are necessary. One must be called ABCDEFGHIJKLMNOPQRSTUVWXYZ, and the other can be named anything.

define is uppercase (character)
set [supported characters v] to [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
set [i v] to [1]
set [str v] to []
repeat (length of (supported chararacters))
    if <(letter (i) of (supported characters)) = (character)> then
        set [str v] to ( join (str) (character) )
    else
        set [str v] to ( join (str) (letter (i) of (supported characters)) )
    end
    change [i v] by (1)
end
switch costume to (null v) //This is the second costume
switch costume to (str)
if <(costume [number v]) = [1]> then //The first costume is ABCDEFGHIJKLMNOPQRSTUVWXYZ
    set [is upper case v] to [true]
else
    set [is upper case v] to [false]
end

Distance Method

Similar to the "Two Costume Method", instead of costumes, this script uses the distance to ( v) block, since it is case-sensitive. The sprite this script is on must be named ABCDEFGHIJKLMNOPQRSTUVWXYZ.

define is uppercase (character)
set [num v] to [1]
set [string v] to []
repeat (26)
    if <(letter (num) of [ABCDEFGHIJKLMNOPQRSTUVWXYZ]) = (character)> then
        set [string v] to ( join (string) (character) )
	else
	    set [string v] to ( join (string) (letter (num) of [ABCDEFGHIJKLMNOPQRSTUVWXYZ]))
		end
change [num v] by (1)
end
if <(distance to (string)) = [0]> then
    set [is upper case v] to [true]
else
    set [is upper case v] to [false]

It can be done with two sprites, one named ABCDEFGHIJKLMNOPQRSTUVWXYZ, another with the above code, as long as they are placed on each other.

() of () Method

Sprite names are case sensitive. This script uses the [ v] of ( v) block, as it is case sensitive. The sprite must be named ABCDEFGHIJKLMNOPQRSTUVWXYZ.

define is uppercase [string]
set [Supported Characters v] to [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
set [counter v] to [1]
set [string v] to []
set [result v] to [in-progress]
repeat (26)
if <(letter (counter) of (Supported Characters)) = (string)> then
set [string v] to (join (string :: variables) (string :: custom))
else
set [string v] to (join (string :: variables) (letter (counter) of (Supported Characters))
end
if <([costume # v] of (string :: variables)) = [0]> then // this checks if the variable of the sprite equals zero, that means the sprite does not exist
set [result v] to [lower-case]
else
set [result v] to [upper-case]
end
change [counter v] by (1)
end

52 Variables Method

Archive.png This article or section documents something not included in the current version of Scratch (3.0). It is only useful from a historical perspective.

Variables names can also be used to check the case of a character. For example, one could have a variable named "A" and a variable named "a". This method is faster than the 53 costumes method and 2 costumes method.[citation needed]


Note Warning: This method uses a few edited blocks that can be obtained by editing the JSON of a project.

This script will only work in Scratch 2.0.

define Create Vars
set [Characters v] to [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]
set [p1 v] to [1]
repeat (26)
  set (letter (p1) of (Characters)) to [1]
  change [p1 v] by (1)
end
repeat (26)
  set (letter (p1) of (Characters)) to [0]//these edited blocks were used to speed up the process of creating 52 variables, they are not necessary but saves the trouble of having to manually create and set 52 separate variables
  change [p1 v] by (1)
end
define isUppercase (character)
if <((character) of (Sprite1 v)) = [1]> then//This edited block checks the value of a variable in a specific sprite, replace Sprite1 with whatever sprite one ran the Create Vars custom block on
  set [is uppercase v] to [yes]
else
  set [is uppercase v] to [no]

Four Variables Method

Archive.png This article or section documents something not included in the current version of Scratch (3.0). It is only useful from a historical perspective.

Variables names are case-sensitive. This is faster than the 53 costumes method and 2 costumes method and uses fewer variables then the 52 Variables method, therefore, people might use this method.

Note Warning: This method uses a few edited blocks that can be obtained by editing the JSON of a project—don't use this method until feeling ready to edit JSON files or use edited blocks appropriately. This script will only work in Scratch 2.0.
define is uppercase (character)
// Run without screen refresh is recommended
set [ABCDEFGHIJKLMNOPQRSTUVWXYZ v] to [ABCDEFGHIJKLMNOPQRSTUVWXYZ] // This is needed
set [str v] to []
set [i v] to [0]
repeat (26)
change [i v] by (1)
if <(letter (i) of [ABCDEFGHIJKLMNOPQRSTUVWXYZ]) = (character)> then
set [str v] to ( join (str) (character) )
else
set [str v] to ( join (str) (letter (i) of (ABCDEFGHIJKLMNOPQRSTUVWXYZ) )
end
end
if <((str) of (x v)) = [ABCDEFGHIJKLMNOPQRSTUVWXYZ]> then // This is edited to check does the variable exists if not it will return "0". Replace x with the sprite one ran this block on (unless the variable "ABCDEFGHIJKLMNOPQRSTUVWXYZ" is for all sprites, if that is the case replace x with Stage)
set [is uppercase v] to [true]
else
set [is uppercase v] to [false]
end

See Also

Cookies help us deliver our services. By using our services, you agree to our use of cookies.