(Android) неожиданное совпадение Pattern.compile ("\\ w +") с буквой Юникод - PullRequest
0 голосов
/ 04 февраля 2020

Регулярное выражение \ w символьный класс в java .util.regex.Pattern на Android устройстве выдает результаты, отличные от обычной JVM.

Есть ли способ, которым \ w соответствует только [A- Za-z0-9_] на Android?

// kotlin
@Test
fun test() {

    // val pu = Pattern.compile("""\w+""",Pattern.UNICODE_CHARACTER_CLASS)
    // on Android: java.lang.IllegalArgumentException: Unsupported flags: 256

    fun matchOrNull(pattern:String,input:String):String?{
        // no UNICODE_CHARACTER_CLASS
        val m = Pattern.compile(pattern).matcher(input)
        return if(m.find()) m.group(0) else null
    }

    assertEquals( null, matchOrNull("\\w+", "-"))
    assertEquals( "a", matchOrNull("\\w+", "a"))
    assertEquals( null, matchOrNull("\\w+", "あ"))
    // on Android: java.lang.AssertionError: expected:<null> but was:<あ>
}

1 Ответ

0 голосов
/ 04 февраля 2020

Если вы используете Kotlin, попробуйте это:

private val PASSWORD = Pattern.compile("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,256}")
private val MINIMUM_PASSWORD_LENGTH = 8

fun isValidPassword(password: String): Boolean {
   return password.length >= MINIMUM_PASSWORD_LENGTH && PASSWORD.matcher(password).matches()
}

Это будет проверять строку ввода для прописных, строчных букв, цифр c и длины> 8

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