[英]Regular Expression allows specific special characters in java
我需要知道包含字母數字字符,@,下划線(_),句號(。)且沒有任何空格的字符串的正則表達式。 並且也適用於字母數字字符,並且允許空格。 我嘗試過這個正則表達式,
^[_A-Za-z0-9-\\.\\@]$ and ^[A-Za-z0-9-\\s]$
碼:
private static final String Username_REGEX ="^[_A-Za-z0-9.@-]$";
public static boolean isUsername(EditText editText, boolean required) {
return isValid(editText, Username_REGEX,Username_MSG, required);
}
public static boolean isValid(EditText editText, String regex, String errMsg, boolean required) {
String text = editText.getText().toString().trim();
editText.setError(null);
if ( required && !hasTextemt(editText) ) return false;
if (required && !Pattern.matches(regex, text)) {
editText.setError(errMsg);
return false;
};
return true;
}
public static boolean hasTextemt(EditText editText) {
String text = editText.getText().toString().trim();
editText.setError(null);
if (text.length() == 0) {
editText.setError(emt);
return false;
}
return true;
}
這個對嗎? 我沒有得到適當的結果。 誰能指導我?
移動破折號-
在字符類的末尾:
^[_A-Za-z0-9.@-]+$
和
^[A-Za-z0-9\\s-]+$
在兩個字符之間表示一個范圍。
編輯:您還需要一個+
修飾符來匹配字符類中的一個或多個字符。
我假設您正在通過EditText
小部件獲得此輸入。 因此,可以在XML
文件的布局內添加以下屬性,以使其僅接收指定的字符。 :
android:digits="abcdefghijklmnopqrstuvwxyz0123456789,.-@_"
請注意,它將不允許使用任何大寫字母。
只需添加您希望用戶能夠輸入的任何數字/鍵即可。 如果您不擔心任何字符的模式和出現次數 ,那么您甚至不需要任何正則表達式 。
希望能幫助到你
嘗試
"[\\w@\\.]+" //for alphanumeric, @, .
"[\\w\\s]+" //for alphanumeric, spaces
如果需要匹配整個單詞,請添加^和$。
PS:對於測試regexp,我始終使用RegexPlanet (而不是垃圾郵件:P)
希望能幫助到你。
您只缺少一個量詞 。 在表達式^[_A-Za-z0-9.@-]$
, 字符類 [_A-Za-z0-9.@-]
與該類中的一個字符完全匹配。 要允許重復的字符,您需要定義一個數量詞 。
*
{0,}
縮寫{0,}
匹配0個或多個字符(==>這允許空字符串!)
+
{1,}
縮寫{1,}
匹配1個或更多字符
{n,m}
匹配最小n
字符和最大m
字符。
所以你的正則表達式看起來像
^[_A-Za-z0-9.@-]+$
如果您需要1個或多個字符,或者
^[_A-Za-z0-9.@-]{6,20}$
如果您想要至少6個字符且最多20個字符。
其他事情:
您可以用\\w
替換_A-Za-z0-9
,但是請注意, \\w
是基於Unicode的,並且包含所有語言的所有字母和數字。
A-Za-z
僅是ASCII,也許您想看看Unicode屬性 。 使用\\p{L}
可以匹配任何語言的字母。
在字符類的末尾缺少加號(意味着一個或多個), 並且可以大大簡化:
^[\\w.@]+$
字符類中的字符失去了特殊的含義,因此除了方括號和其他幾個字符外,不需要轉義。
僅對於字母數字和空格,即字母,數字和空格的組合:
^[a-zA-Z0-9 ]+$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.