【问题标题】:how for a password must contain at least eight characters, at least one number and lowercase and special characters?密码如何必须包含至少八个字符,至少一个数字以及小写和特殊字符?
【发布时间】:2020-04-01 14:10:50
【问题描述】:

所以我做了一些验证的密码,我做的第一件事是在 passittord 编辑文本上进行验证,当我输入密码时,会出现一个红色的关闭图标并显示一条消息错误,密码填写后关闭图标还是没有变成绿色的勾号图标,当密码里有字母、大写字母和数字时,关闭的图标变成了成功或核对表图标,有没有朋友能帮我解决这个问题?

我做了这个仍然显示关闭图标

这是代码

<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();
        }

    }

【问题讨论】:

  • 这是您应该查看的an example。如果链接可能断开,我向未来的人道歉,但这是一个广泛的话题。我建议 OP 还检查各个站点以了解不同的设置方式。
  • 使用Reg-Ex 进行密码验证。
  • 感谢您帮助我获得参考@ADM

标签: java android kotlin


【解决方案1】:

好吧,我不打算对其进行测试,但是您可以使用正则表达式来满足要求,尤其是使用前额断言,如下所示:

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

前额断言都不会消耗字符,但如果满足条件,它们会查找。最后一部分说应该有任何字符,但至少有8个。顺便说一句,我在最后一个正则表达式类中放了一些特殊字符,你可以放你认为必须允许的。

【讨论】:

    【解决方案2】:

    你可以试试正则表达式

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

    如果您的密码与正则表达式匹配,将返回 truefalse

    【讨论】:

    • 好的,我会应用它,但是如果我想在满足所有要求的情况下在右侧显示成功图标,我该怎么办,我只能显示一个关闭图标@user1748153
    • 我收到错误非法转义:'\-' and '\S' @ user1748153
    • 这不可能-> val PASSWORD_PATTERN = Pattern.compile("^(?=.*?[A-Z])" + "(?=.*?[a-z])" + " .{1,}\$").toRegex() val 密码 = editTextPassword.text.toString().trim() if (!PASSWORD_PATTERN.matches(password)) { editTextPassword.setError("harus ada huruf besar dan huruf kecil ") editTextPassword.requestFocus() } @user1748153
    【解决方案3】:

    您何时致电editTextPassword.setError(null) 重置错误状态可见性?

    TextWatcher 添加到您的EditText,检查afterTextChanged 内部是否设置了错误状态,如果是 - 重置(调用setError(null))。您还可以在每个字母更改后进行实时验证,而不仅仅是在按下按钮之后。

    要使用正确的字符验证正确的密码,请使用正则表达式,就像其他答案建议的那样(我有点误解了你的问题......)

    【讨论】:

    • 是的,我尝试显示关闭图标和成功图标,如果所有条件都通过了如何显示成功图标@snachmsm
    • 我不知道这个状态(绿色复选标记)是不是内置的。如果不是,我会在TextWatchers afterTextChanged 中实时切换该字段的error colordrawable。依然使用setError的方法来显示文字,甚至是“正面”
    猜你喜欢
    • 2021-09-08
    • 2023-01-19
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多