0
我需要根據給定的條件來驗證輸入,Java的正則表達式的最大長度與一個連字符
- 必須是20個字符,總長度 負一第五位必須是英文字母 -remaining應該是數字,但必須存在一個僅在數字之間出現的連字符( - )。 我有這樣
([a-zA-Z]){5}[0-9]+([-]){15}
的正則表達式,但它允許在最後的連字符,以及和沒有連字符甚至接受。
我需要根據給定的條件來驗證輸入,Java的正則表達式的最大長度與一個連字符
- 必須是20個字符,總長度 負一第五位必須是英文字母 -remaining應該是數字,但必須存在一個僅在數字之間出現的連字符( - )。 我有這樣
([a-zA-Z]){5}[0-9]+([-]){15}
的正則表達式,但它允許在最後的連字符,以及和沒有連字符甚至接受。
您可以使用
^[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+$
詳細:
^
- 匹配5個字母(?=[0-9-]{15}$)
- - 字符串的開始[a-zA-Z]{5}
符合要求的字符串的其餘部分應爲15個字符長[0-9]+-[0-9]+
- 1+數字後跟連字符,後跟1+數字$
- 字符串的結尾(你可以用\z
替換字符串的結尾最後一個換行符之前排除匹配)如果使用.matches()
,你可以省略外錨。
String pat = "[a-zA-Z]{5}(?=[0-9-]{15}$)[0-9]+-[0-9]+";
System.out.println("abcde123456-89".matches(pat)); // true
System.out.println("abcde-12345689".matches(pat)); // false
System.out.println("abcde12345689-".matches(pat)); // false
System.out.println("abcde12345689-12".matches(pat)); // false
剛剛添加的非正則表達式的角度位置:
if (str.length() != 20) {
return false;
}
for (int i = 0; i < 5; ++i) {
if (!Character.isAlphabetic(str.charAt(i)) {
return false;
}
}
boolean hyphenFound = false;
for (int i = 5; i < 20; ++i) {
char ch = str.charAt(i);
if (ch == '-') {
hyphenFound = true;
} else if (!Character.isDigit(ch) && !Character.isAlphabetic(ch)) {
return false;
}
}
return hyphenFound;
那麼你爲什麼不把一個連字符*內*號的格局? –
我認爲在這裏嘗試一個非正則表達式的解決方案會更簡單。 – Maroun
是的,我確實在連字符裏面,但效果是一樣的。我剛剛添加了上面的那個,因爲那是我的最後一次測試。 – user3028989