2012-07-18 178 views
8

我需要一個正則表達式來滿足這兩個條件。java - 如何測試一個字符串是否包含字母和數字

只有當字符串同時包含A-Z和0-9時,纔會給出我的答案。

這是我已經試過:

if PNo[0].matches("^[A-Z0-9]+$")

它不工作。

+0

我沒有看到任何需要構建一個正則表達式來完成這兩個匹配。這會更快(更容易閱讀),兩次調用String.matches(),兩次調用AND(見我的答案)。 – jahroy 2012-07-18 02:44:27

回答

17

我懷疑,下面的正則表達式是由環視放緩,但無論它應該工作:

.matches("^(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+$") 

正則表達式斷言,有一個大寫字母字符(?=.*[A-Z])某個字符串中,並斷言在字符串的某個位置有一個數字(?=.*[0-9]),然後檢查是否所有內容都是字母字符或數字。

+0

我試過你,它的工作......謝謝.. – Lucky 2012-07-18 02:49:18

6

信可之前或之後的數字,所以這個表達式應該工作:

(([A-Z].*[0-9])|([0-9].*[A-Z])) 

下面是一個使用這種表達的代碼示例:

Pattern p = Pattern.compile("(([A-Z].*[0-9])|([0-9].*[A-Z]))"); 
Matcher m = p.matcher("AXD123"); 
boolean b = m.find(); 
System.out.println(b); 
+0

我認爲你應該清楚的知道,這隻有在編譯'Pattern'並使用'Matcher'時纔有效。它不適用於String類中的'.matches()'。 – nhahtdh 2012-07-18 02:35:11

+0

你的條件似乎很好,但我需要檢查「_」和「 - 」,意思是說我只需要A-Z,0-9 ... – Lucky 2012-07-18 02:37:37

+0

@Lucky:你應該接受適合你的答案。並澄清你的問題,如果你的意圖似乎沒有正確溝通。 – nhahtdh 2012-07-18 02:40:14

1

什麼([A-Z].*[0-9]+)|([0-9].*[A-Z]+)

3

這應該解決您的問題:

^([A-Z]+[0-9][A-Z0-9]*)|([0-9]+[A-Z][A-Z0-9]*)$ 

但它是不可讀。我建議先用「^ [A-Z0-9] + $」檢查輸入,然後用「[AZ]」檢查以確保它至少包含一個字母,然後檢查「[0-9]」以確保它包含至少一個數字。這樣您可以輕鬆添加新限制,並且代碼仍然可讀。

+0

這應該是正確的答案。 – nhahtdh 2012-07-18 02:50:36

11

它更容易編寫和閱讀,如果您使用兩個單獨的正則表達式:

String s = "blah-FOO-test-1-2-3"; 

String numRegex = ".*[0-9].*"; 
String alphaRegex = ".*[A-Z].*"; 

if (s.matches(numRegex) && s.matches(alphaRegex)) { 
    System.out.println("Valid: " + input); 
} 

更重要的是,寫一個方法:

public boolean isValid(String s) { 
    String n = ".*[0-9].*"; 
    String a = ".*[A-Z].*"; 
    return s.matches(n) && s.matches(a); 
} 
1

這裏是你

正則表達式

基本說明:

匹配在字符串的當前行:.

匹配0或任何字符的任何量:*

匹配任何在當前行:.*

匹配集合中的(任何字符範圍)字符:[start-end]

匹配從一組正則表達式中的一個:(regex1|regex2|regex3)

請注意,開始和結束來自ASCII順序,並且開始必須在結束之前。例如,您可以執行[0-Z],但不能執行[Z-0]。這是給你參考 enter image description here

檢查ASCII表對正則表達式的字符串

直接讓yourString.matches(theRegexAsString)

檢查字符串包含字母:

檢查是否有信:yourString.matches(".*[a-zA-Z].*")

Chec k如果有一個較低的套管信:yourString.matches(".*[a-z].*")

檢查,如果有一個上套管信:yourString.matches(".*[A-Z].*")

檢查字符串中包含的數字:

yourString.matches(".*[0-9].*")

檢查字符串包含數字和字母:

最簡單的方法是用字母和數字

yourString.matches(".*[a-zA-Z].*") && yourString.matches(".*[0-9].*")

匹配兩次,如果你喜歡的所有匹配在一起的一切,正則表達式將是這樣的:匹配其在某個地方有一個字符的字符串,然後有一些事後的任何位置,或其他方式。所以,你的正則表達式是:

yourString.matches(".*([a-zA-Z].*[0-9]|[0-9].*[a-zA-Z]).*")

額外的正則表達式,供大家參考:

檢查字符串恆星信

yourString.matches("[a-zA-Z].*")

檢查字符串結尾號碼

yourString.matches(".*[0-9]")

相關問題