我想要一個正則表達式,限制用戶在android中接受特殊字符。需要幫助正則表達式模式,其中排除特殊字符在android
我已經試過這樣:
!phoneNumber.matches("[/,'*:<>[email protected]#$%^&()+=?()\"|!\[#$-]")
,但它總是返回true
不管電話號碼是否包含特殊字符或沒有。
我想要一個正則表達式,限制用戶在android中接受特殊字符。需要幫助正則表達式模式,其中排除特殊字符在android
我已經試過這樣:
!phoneNumber.matches("[/,'*:<>[email protected]#$%^&()+=?()\"|!\[#$-]")
,但它總是返回true
不管電話號碼是否包含特殊字符或沒有。
你的正則表達式[/,'*:<>[email protected]#$%^&()+=?()\"|!\[#$-]
匹配任何出現過的字符,因此它的否定。因此!phoneNumber.matches("[/,'*:<>[email protected]#$%^&()+=?()\"|!\[#$-]")
評估爲真是否它是a或aa或a! as aa and a!不是一個指定的字符。只有評估爲false的案例將是這些字符中的任何一個發生一次。
您必須只接受除這些以外的字符。爲此,應在字符類開頭括號([
)後面使用^
,並在結尾括號後面加上+
。此正則表達式匹配除列出的字符以外的任何一個或多個字符。
必需的正則表達式將是"[^/,'*:<>[email protected]#$%^&()+=?()\"|!\\[#$-]+"
,它將模式與除這些以外的一個或多個字符相匹配。
注意:你的實現似乎是在java中。這個正則表達式工作在java。
另一件事:爲什麼你添加了\"
而不是"
?如果是在字符串內部逃脫"
,你不能只給\[
,但需要\\[
我想。
@ dan1111它在java中工作,請檢查它 – 2013-02-11 10:47:58
@ dan1111 OP的實現似乎是在java中,我不知道任何其他語言與'匹配'函數與正則表達式作爲參數,並在Java中,這種工作沒有錨定。 – 2013-02-11 11:00:33
我的錯誤道歉。我刪除downvote。 – 2013-02-11 11:04:46
既然你似乎是相匹配的電話號碼(在那個電話號碼的一個非常有限的定義),我建議使用一個積極的而不是消極的測試:
phoneNumber.matches("[\\d\\s]+")
這將返回如果屬實該字段只包含數字和空格(通常我會允許其他字符,至少()-+
在電話號碼中,但是您已將這些字符排除爲特殊字符,所以我保持一致)。
這非常簡單,並且將從字段中排除所有無效字符。
您可能想要超越這一點,並確保它也是有效的電話號碼格式。這將取決於你想匹配什麼類型的電話號碼。
這裏是一個特殊的字符驗證的我正則表達式的變體:
String regExp = "^[^<>{}\"/|;:.,[email protected]#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
Pattern pattern = Pattern.compile(regExp, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
return matcher.matches();
(Java代碼)
你「想」我不會在這裏描述我wants.What你試過嗎? – EvZ 2013-02-11 10:13:27
定義特殊字符。 – 2013-02-11 10:13:28
我試過這個!phoneNumber。匹配(「[/,'*:<>!〜@#$%^&()+ =?()\」|!\\ [#$ - ]「),但它總是返回true,或者phonenumber包含特殊字符或不是。 – 2013-02-11 10:15:37