ksh - test if string contains alphanumeric...

Okay I will let users input spaces as well :slight_smile:

I am having a mental block. I have done a couple of searches but havent found anything that I understand (the likes of :alpha: and awk).

Basically I want to give the user an option to enter some text which will go down as a field within a flat file ( which is delimeted by : ).

I want to limit this to 50 characters (I believe I can use typeset -z50 for this)

I also just want a-z,A-Z,(spaces) and numbers. Whats the best way to validate the input?

one way is to use tr to remove unwanted character types. -dc removes everything except those char types you specify. [:alnum;] is alphanumeric, so if you check the length of the string it should be unchanged if it contains only the char types you want.

# t is the input string, ck is a variable to check the contents of t
t="thisisa555ctest"

ck=$( echo "$t" | tr -dc '[:alnum:]')
if [[ ${#t} -eq ${#ck} ]]; then
      echo "ok"
else
      echo "not ok"
      exit 1
fi
# t is all good chars at this point
# check length of t

if [[ ${#t} -gt 50 ]]; then
      echo "not ok too long"
fi

Jim,

Thanks for the response. Having tested the code thi doesn;t allow me to have spaces within the string. Any ideas?

Also what does the # mean within ${#t}?

Thank you

I am using this code. The tests I have done appear to work.

while true
do
clear
echo "Enter Text: \c"
read t
case $t in
+([a-z]|[A-Z]|[0-9]|[' ']))
echo test string is okay
break
;;
*)
echo test string not okay
sleep 2
;;
esac
done