Example : A standard basic Form in Streamlit with various Validations.
import time
import streamlit as st
import re
from datetime import date
from sqlalchemy import create_engine, text
# Database connectivity code using SQLAlchemy technique
engine = create_engine("mysql+pymysql://root:@localhost/cakebake")
# st.success("Database Connected Successfully")
st.title("User Registration Form")
with st.form("form1"):
# This regex allows strictly letters (uppercase and lowercase) and limits the input length to 20.
name1 = st.text_input("Enter Your Name (Only letters, max 20 characters)", key="name2")
# Validate the input using regular expression
if name1:
if not re.fullmatch(r"[A-Za-z ]{1,20}", name1):
st.error("Invalid name entry: only letters allowed, and of max 20 characters.")
# No error message if input is valid
# Mobile number input (10-digit)
mob1 = st.number_input("Enter Your Mobile Number(10 digits)", key="mob2", min_value=0, max_value=9999999999, step=1)
if len(str(mob1)) > 10:
st.error("Mobile number must be at most of 10 digits.")
email1 = st.text_input("Enter Your Email", key="email2")
if email1:
# A simple regex: any non-@ chars, then an @, then non-@ chars, a dot, then non-@ chars.
if not re.fullmatch(r"[^@]+@[^@]+\.[^@]+", email1):
st.error("Invalid email format. Please enter a valid email address.")
#gender1 = st.radio("Select Your Gender", ["Male", "Female", "Transgender"], key="gender2") # Male is By default selected
gender1 = st.radio("Select Your Gender", ["Male", "Female", "Transgender"], index= 1, key="gender2") # Female is By default selected
passwd1 = st.text_input("Enter Password", type="password", key="passwd2")
if passwd1:
# This regex ensures: 8-30 characters, at least one lowercase, one uppercase, one digit, and one special symbol (@$!%*#?&)
if not re.fullmatch(r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,30}$", passwd1):
st.error(
"Invalid password. It must be 8-30 characters long, include at least one lowercase letter, one uppercase letter, one number, and one special symbol (@$!%*#?&).")
addr1 = st.text_area("Enter Your Address", height=150, max_chars=1000, key="addr2")
dob1 = st.date_input("Choose Your Birth Date", key="dob2", value=date.today())
nat1 = st.selectbox("Select Your Nationality", ('Choose One','India', 'USA', 'Nepal', 'Bhutan', 'Sri Lanka'), key="nat2")
#nat1 = st.selectbox("Select Your Nationality", ('India', 'USA', 'Nepal', 'Bhutan', 'Sri Lanka'), key="nat2") # by default India is selected
#nat1 = st.selectbox("Select Your Nationality", ('India', 'USA', 'Nepal', 'Bhutan', 'Sri Lanka'), index=1, key="nat2") # by default USA is selected
#st.write("Choose Your Qualification") None check box is selected
#matric1 = st.checkbox("Matric", key="matric2")
#inter1 = st.checkbox("Intermediate", key="inter2")
#grad1 = st.checkbox("Graduation", key="grad2")
st.write("Choose Your Qualification")
matric1 = st.checkbox("Matric", key="matric2")
inter1 = st.checkbox("Intermediate", value= True, key="inter2") # intermediate is selected by default
grad1 = st.checkbox("Graduation", key="grad2")
rem1 = st.text_input("Enter Your Remarks, if any", value="N/A", disabled=True, key="rem2")
# Buttons in a row
col1, col2, col3, col4, col5 = st.columns(5)
with col1:
submit1 = st.form_submit_button("Submit")
with col2:
reset1 = st.form_submit_button("Reset")
with col3:
delete1 = st.form_submit_button("Delete")
with col4:
update1 = st.form_submit_button("Update")
with col5:
exit1 = st.form_submit_button("Exit")
NB: This validation will work when we click 'Submit' Button.
Example : A standard basic form in Streamlit with various validations and compulsory data filled out.
import time
import streamlit as st
import re
from datetime import date
from sqlalchemy import create_engine, text
# Database connectivity code using SQLAlchemy technique
engine = create_engine("mysql+pymysql://root:@localhost/cakebake")
# st.success("Database Connected Successfully")
st.title("User Registration Form")
with st.form("form1"):
# This regex allows strictly letters (uppercase and lowercase) and spaces, and limits to max 20 characters.
name1 = st.text_input("Enter Your Name (Only letters, max 20 characters)", key="name2")
# Validate the input using regular expression
if name1 and not re.fullmatch(r"[A-Za-z ]{1,20}", name1):
st.error("Invalid name entry: only letters allowed, and of max 20 characters.")
# Mobile number input (10-digit)
mob1 = st.number_input("Enter Your Mobile Number (10 digits)", key="mob2", min_value=0, max_value=9999999999, step=1)
# Email validation (Must match standard email format)
email1 = st.text_input("Enter Your Email", key="email2")
if email1 and not re.fullmatch(r"[^@]+@[^@]+\.[^@]+", email1):
st.error("Invalid email format. Please enter a valid email address.")
# Radio for Gender with no default valid selection.
# A placeholder "Select Gender" is added to force the user to choose an option.
gender_options = ["Select Gender", "Male", "Female", "Transgender"]
gender1 = st.radio("Select Your Gender", gender_options, key="gender2")
# Original (default) code:
# gender1 = st.radio("Select Your Gender", ["Male", "Female", "Transgender"], key="gender2") # Male is By default selected
# gender1 = st.radio("Select Your Gender", ["Male", "Female", "Transgender"], index=1, key="gender2") # Female is By default selected
# Password validation (Must include uppercase, lowercase, number, special symbol; length 8-30)
passwd1 = st.text_input("Enter Password", type="password", key="passwd2")
if passwd1 and not re.fullmatch(
r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,30}$",
passwd1,
):
st.error(
"Invalid password. It must be 8-30 characters long, include at least one lowercase letter, one uppercase letter, one number, and one special symbol (@$!%*#?&)."
)
# Address input (Limited to 1000 characters)
addr1 = st.text_area("Enter Your Address", height=150, max_chars=1000, key="addr2")
# Date of Birth selection
dob1 = st.date_input("Choose Your Birth Date", key="dob2", value=date.today())
# Nationality selection (forcing user to select a valid option)
nat1 = st.selectbox("Select Your Nationality", ('Choose One', 'India', 'USA', 'Nepal', 'Bhutan', 'Sri Lanka'), key="nat2")
# nat1 = st.selectbox("Select Your Nationality", ('India', 'USA', 'Nepal', 'Bhutan', 'Sri Lanka'), key="nat2") # by default India is selected
# nat1 = st.selectbox("Select Your Nationality", ('India', 'USA', 'Nepal', 'Bhutan', 'Sri Lanka'), index=1, key="nat2") # by default USA is selected
# Qualification Selection using Checkboxes with no default selection.
st.write("Choose Your Qualification")
# None of the checkboxes is selected initially.
# matric1 = st.checkbox("Matric", key="matric2")
# inter1 = st.checkbox("Intermediate", key="inter2")
# grad1 = st.checkbox("Graduation", key="grad2")
matric1 = st.checkbox("Matric", key="matric2")
inter1 = st.checkbox("Intermediate", key="inter2")
grad1 = st.checkbox("Graduation", key="grad2")
# Remarks input (Disabled)
rem1 = st.text_input("Enter Your Remarks, if any", value="N/A", disabled=True, key="rem2")
# Buttons in a row
col1, col2, col3, col4, col5 = st.columns(5)
with col1:
submit1 = st.form_submit_button("Submit")
if submit1:
errors = []
# Validate Name Field
if not name1.strip():
errors.append("⚠️ Name is required.")
# Validate Mobile Number: check for exactly 10 digits
if len(str(mob1)) != 10:
errors.append("⚠️ Mobile number must be exactly 10 digits.")
# Validate Email Field
if not email1.strip():
errors.append("⚠️ Email is required.")
elif not re.fullmatch(r"[^@]+@[^@]+\.[^@]+", email1):
errors.append("⚠️ Invalid email format.")
# Validate Gender: ensure the placeholder is not selected
if not gender1 or gender1 == "Select Gender":
errors.append("⚠️ Gender is required.")
# Validate Password Field
if not passwd1.strip():
errors.append("⚠️ Password is required.")
elif not re.fullmatch(
r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,30}$",
passwd1,
):
errors.append("⚠️ Password does not meet security requirements.")
# Validate Address Field
if not addr1.strip():
errors.append("⚠️ Address is required.")
# Validate Nationality: force selection of a valid option
if nat1 == "Choose One":
errors.append("⚠️ Please select a nationality.")
# Optionally, ensure at least one qualification is selected
if not (matric1 or inter1 or grad1):
errors.append("⚠️ At least one qualification must be selected.")
if errors:
for err in errors:
st.warning(err)
else:
st.success("✅ Form submitted successfully!")
with col2:
reset1 = st.form_submit_button("Reset")
with col3:
delete1 = st.form_submit_button("Delete")
with col4:
update1 = st.form_submit_button("Update")
with col5:
exit1 = st.form_submit_button("Exit")
NB: This validation and filled Confirmation will work when we click 'Submit' Button.
0 Comments