Мое требование - принимать строковый ввод длиной от 3 до 50 символов, который может содержать только буквенно-цифровые символы, пробелы (только в середине) и дефис.
Вот мой TestCase
class TestInput {
@Test
fun testUsernameValidation() {
println("Testing Valid UserName")
val tests = arrayOf(
"HelL&",
"HelL&&",
"HelL+&^% w0rld~",
"hello-the|_++)_%re",
" Sample",
"sh",
"slugging-patternsSLUGGING-pattern",
"sipletext"
)
tests.forEach {
println("${it.isValidUserName()}\t$it")
}
}
}
И мое расширение
fun String.isValidUserName(): Boolean {
val pattern = Pattern.compile(
"[^\\s]" +
"[a-zA-Z 0-9\\-]{0,50}" +
"[^\\s]" )
return this.length in 3..50
&& pattern.matcher(this).matches()
}
Этот тест даст результат:
Testing Valid UserName
true HelL&
false HelL&&
false HelL+&^% w0rld~
false hello-the|_++)_%re
false Sample
false sh
true slugging-patternsSLUGGING-pattern
true sipletext
Единственная проблема заключается впервая строка, которая содержит только 1 специальный символ, возвращает true. Что-то не так с созданным мной шаблоном?