2013-02-11 46 views
-3

我想要一個正則表達式,限制用戶在android中接受特殊字符。需要幫助正則表達式模式,其中排除特殊字符在android

我已經試過這樣:

!phoneNumber.matches("[/,'*:<>[email protected]#$%^&()+=?()\"|!\[#$-]") 

,但它總是返回true不管電話號碼是否包含特殊字符或沒有。

+2

你「想」我不會在這裏描述我wants.What你試過嗎? – EvZ 2013-02-11 10:13:27

+2

定義特殊字符。 – 2013-02-11 10:13:28

+0

我試過這個!phoneNumber。匹配(「[/,'*:<>!〜@#$%^&()+ =?()\」|!\\ [#$ - ]「),但它總是返回true,或者phonenumber包含特殊字符或不是。 – 2013-02-11 10:15:37

回答

1

你的正則表達式[/,'*:<>[email protected]#$%^&()+=?()\"|!\[#$-]匹配任何出現過的字符,因此它的否定。因此!phoneNumber.matches("[/,'*:<>[email protected]#$%^&()+=?()\"|!\[#$-]")評估爲真是否它是aaaa! as aa and a!不是一個指定的字符。只有評估爲false的案例將是這些字符中的任何一個發生一次

您必須只接受除這些以外的字符。爲此,應在字符類開頭括號([)後面使用^,並在結尾括號後面加上+。此正則表達式匹配除列出的字符以外的任何一個或多個字符。

必需的正則表達式將是"[^/,'*:<>[email protected]#$%^&()+=?()\"|!\\[#$-]+",它將模式與除這些以外的一個或多個字符相匹配。

注意:你的實現似乎是在java中。這個正則表達式工作在java

另一件事:爲什麼你添加了\"而不是"?如果是在字符串內部逃脫",你不能只給\[,但需要\\[我想。

+0

@ dan1111它在java中工作,請檢查它 – 2013-02-11 10:47:58

+1

@ dan1111 OP的實現似乎是在java中,我不知道任何其他語言與'匹配'函數與正則表達式作爲參數,並在Java中,這種工作沒有錨定。 – 2013-02-11 11:00:33

+0

我的錯誤道歉。我刪除downvote。 – 2013-02-11 11:04:46

0

既然你似乎是相匹配的電話號碼(在那個電話號碼的一個非常有限的定義),我建議使用一個積極的而不是消極的測試:

phoneNumber.matches("[\\d\\s]+") 

這將返回如果屬實該字段只包含數字和空格(通常我會允許其他字符,至少()-+在電話號碼中,但是您已將這些字符排除爲特殊字符,所以我保持一致)。

這非常簡單,並且將從字段中排除所有無效字符。

您可能想要超越這一點,並確保它也是有效的電話號碼格式。這將取決於你想匹配什麼類型的電話號碼。

0

這裏是一個特殊的字符驗證的我正則表達式的變體:

String regExp = "^[^<>{}\"/|;:.,[email protected]#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$"; 
Pattern pattern = Pattern.compile(regExp, Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher(text); 
return matcher.matches(); 

(Java代碼)