我在android studio kotlin中创建注册页面密码长度必须大于8个符号并且必须包含至少一个数字否则就不能按下注册按钮
我设法使密码长度超过8个符号是必要的,但我似乎不能添加包含数字的要求。我已经尝试使用包含(Int),但它给了我一个错误。我将非常感谢你的帮助。提前感谢
在我看来,在Kotlin中很容易做到这一点。只有我们使用contains("[0-9]".toRegex()),如果密码中没有数字,则返回false,条件不满足
例子if (password.contains("[0-9]".toRegex())) {
//Write code here
}
以下是kotlin.text
包,包含所有用于处理文本的标准库内容:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/
contains(Int)
这样的东西,因为不可能有这样一个函数你传递给任何类型的如果文本以某种方式表示是该类型的一个实例,对吧?比如contains(Bitmap)
和contains(Dog)
是怎么工作的?一般来说,对于这种事情,你有专门的函数来检查特定的类型-不传递类型作为参数。对于文本,它们通常被称为parse*
,如parseInt
。在Kotlin中,标准函数以to*
开头——在本例中是toInt
和toIntOrNull
。它们尝试将字符串解析为整数,并返回Int
——如果不能解析为整数,则toInt
抛出异常,toIntOrNull
返回null。(还有其他转换为数字的函数,如toFloat
)
现在你有一种方法来检查是否是一个数字-调用toIntOrNull()
对它,看看你是否得到null(不是一个数字)。你想知道字符串中的是否有是数字,对吧?所以你可以这样做:
val hasDigit = password.any { it.toIntOrNull() != null }
如果任何字符的为真,则结果将为true。如果您愿意,可以将其设置为扩展函数:
val String.hasDigit get() = any { it.toIntOrNull() != null }
"password1".hasDigit
>> true
这是做事情的一般方法。对于数字,在Char
s上有一个很好的isDigit()
函数,您可以使用:
password.any { it.isDigit() }
// or if you like
password.any(Char::isDigit)
当然,你也可以使用其他标准函数,如count
,如果你想要最小位数,等等
你可以做的另一件事是创建一个查找,并检查其中是否有字符:
// you can use a string
val allowed = "abcdefghijklmnopqrstuvwxyz!?*"
// or a list - lots of ways to build it!
val allowed = ('a'..'z') + listOf('!', '?') + '*'
// then check
password.all { it in allowed }
或Xayal的regex示例-然后您可以使用any
,all
,none
等来制定您的规则。一旦熟悉了标准库,就可以将所有这些函数组合在一起,生成更具体的东西——这就是它的设计方式