каким образом пароль должен содержать не менее восьми символов, хотя бы одно число и строчные и специальные символы? - PullRequest
0 голосов
/ 01 апреля 2020

, поэтому я сделал пароль с некоторыми проверками, первое, что я сделал, - это проверка в тексте редактирования passittord, когда я ввел пароль, появится красный значок закрытия и отобразится ошибка сообщения, после того, как пароль был заполнен, значок закрытия все еще не изменился на зеленый значок галочки, когда пароль заполнен буквами, большими буквами и цифрами, а значок, который был закрыт, превратился в значок успеха или контрольного списка, могут ли друзья помочь мне решить эту проблему?

Я сделал это все еще отображает значок закрытия

enter image description here

это код

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/textInputPassword"
    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="20dp"
    android:layout_marginTop="10dp"
    android:layout_marginEnd="20dp"
    android:hint="Password"
    app:counterEnabled="true"
    app:counterMaxLength="6"
    app:endIconMode="clear_text"
    app:endIconDrawable="@drawable/ic_canceles"
    app:errorEnabled="true"
    app:endIconTint="#DF0000"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textInputEmail">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/editTextPassword"
        android:layout_width="match_parent"
        android:maxLines="1"
        android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>

это код kotlin

submitButtom.setOnClickListener {

        if (editTextPassword.text.toString().length < 6) {
            editTextPassword.setError("password minimum contain 6 character")
            editTextPassword.requestFocus()
            editTextPassword.isEnabled = true

        }
        if (editTextPassword.text.toString().length > 6) {
            editTextPassword.setError("password maximum contain 6 character")
            editTextPassword.requestFocus()
        }
        if (editTextPassword.text.toString().equals("")) {
            editTextPassword.setError("please enter password")
            editTextPassword.requestFocus();
        }

    }

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Ну, я не собираюсь проверять это, но вы можете выполнить требования с помощью регулярных выражений, в частности с помощью утверждений на лбу, например:

'^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[],;!?:._-]).{8,}$'

Ни одно из утверждений на лбу не использует символы, но они будет смотреть, если условие выполнено. В последней части говорится, что должен быть любой персонаж, но как минимум 8 из них. Кстати, я добавил некоторые специальные символы в последний класс регулярных выражений, вы можете добавить те, которые, по вашему мнению, должны быть разрешены.

0 голосов
/ 01 апреля 2020

вы можете попробовать с регулярным выражением

val reg = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%!\-_?&])(?=\S+$).{8,}".toRegex()
val editTextPassword = "P@ssw0rd"
reg.matches(password)

вернет true или false, если ваш пароль соответствует регулярному выражению.

0 голосов
/ 01 апреля 2020

Когда вы звоните editTextPassword.setError(null) для сброса видимости состояния ошибки?

Добавьте TextWatcher к вашему EditText, проверьте внутри afterTextChanged, что состояние ошибки установлено , если есть - сброс (вызов setError(null)). Вы также можете выполнять проверку в реальном времени после каждого изменения буквы, а не только после нажатия кнопки.

Для проверки правильности пароля с правильными символами используйте regexp, как предлагают другие ответы (я немного неправильно понял ваш вопрос ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...