Валидатор SSN — различение цифр и символов

#python

#python

Вопрос:

я впервые задаю этот вопрос здесь, в стеке. У меня есть вопрос относительно этого кода:

 ssn = str(input("Enter your ssn:"))

if (len(ssn) == 11 and ssn[3] == '-' and ssn[6] == '-'):
  print(ssn   " is a valid social security number.")
else:
  print(ssn   " is not a valid social security number.")
  

Дело в том, что я подумал, что этот код был бы хорош, если бы я набрал в обычном формате, например 123-45-6789, и это дало бы мне правильную инструкцию print. Однако я также заметил, что если я набрал ddd-dd-dddd , это также дает мне логически правильную инструкцию print, но я хочу работать только с цифрами.

Заранее большое вам спасибо за помощь, в настоящее время я студент и относительно молод в области программирования. Любые результаты будут оценены.

Комментарии:

1. Вы взглянули на использование regex ? или вы против его использования?

2. Мы еще не обязательно говорили о регулярных выражениях, но я открыт для новых знаний. Но сейчас я хотел знать, как закодировать его самым простым способом. Если это имеет смысл. Спасибо за ваш ответ!

Ответ №1:

Это простое регулярное выражение для проверки номера ssn.

 const validSsn = (value: string) =>
  value amp;amp; /^(?!(000|666|9))(d{3}-?(?!(00))d{2}-?(?!(0000))d{4})$/.test(value)
  ? true
  : false
  

Приведенный выше код взят из SSNValidator.org

Ответ №2:

В python вызывается функция isdigit() , которая проверяет, является ли введенная строка цифрой. Мы можем использовать его вместе с получением подмножества вашей строки, мы можем проверить, являются ли другие части цифрами.

 ssn = str(input("Enter your ssn:"))

if (len(ssn) == 11 and ssn[0:3].isdigit() and ssn[3] == '-' and ssn[4:6].isdigit() and ssn[6] == '-' and ssn[7:].isdigit()):
  print(ssn   " is a valid social security number.")
else:
  print(ssn   " is not a valid social security number.")
  

Поскольку вы упомянули, что вы новичок в программировании, просто чтобы немного уточнить,
ssn[x:y] принимает символы из индекса x до (но не включая) индекса y и позволяет обрабатывать его как отдельную строку.

Комментарии:

1. Это очень помогло, изначально я собирался использовать подстроки == 1 или == 2 и так далее. Еще раз, большое вам спасибо за ваше время и помощь, я действительно ценю это. Хорошего дня!