[英]Regex to check string contains only Hex characters
我以前從未做過正則表達式,而且我發現它們對於處理字符串非常有用。 我看過一些教程 (例如),但是我仍然不明白如何對字符串中的十六進制字符進行簡單的Java正則表達式檢查。
用戶將在文本框中輸入以下內容: 0123456789ABCDEF
,我想知道該輸入是正確的,否則,當返回false時,例如XTYSPG456789ABCDEF
。
是否可以使用正則表達式來做到這一點,或者我是否誤解了它們的工作原理?
是的,您可以使用正則表達式來做到這一點:
^[0-9A-F]+$
說明:
^ Start of line. [0-9A-F] Character class: Any character in 0 to 9, or in A to F. + Quantifier: One or more of the above. $ End of line.
要在Java中使用此正則表達式,您可以例如在String上調用matches
方法:
boolean isHex = s.matches("[0-9A-F]+");
請注意, matches
僅查找完全匹配項,因此在這種情況下,您不需要行錨的開始和結束。 看到它在線上工作: ideone
您可能還希望同時允許大寫和小寫AF,在這種情況下,您可以使用以下正則表達式:
^[0-9A-Fa-f]+$
可能是您想使用POSIX字符類\\p{XDigit}
,所以:
^\\p{XDigit}+$
另外,如果您打算非常頻繁地使用正則表達式,建議使用常量以避免每次都重新編譯它,例如:
private static final Pattern REGEX_PATTERN =
Pattern.compile("^\\p{XDigit}+$");
public static void main(String[] args) {
String input = "0123456789ABCDEF";
System.out.println(
REGEX_PATTERN.matcher(input).matches()
); // prints "true"
}
實際上,給出的答案並不完全正確。 出現問題是因為數字0-9也是十進制值。 您要做的部分工作是測試00-99,而不是0-9,以確保較低的值不是十進制數。 像這樣:
^([0-9A-Fa-f]{2})+$
要說這些必須成對出現! 否則-字符串不一樣! :-)
例:
(Pick one)
var a = "1e5";
var a = "10";
var a = "314159265";
如果我在正則表達式中使用了接受的答案,它將返回TRUE。
var re1 = new RegExp( /^[0-9A-Fa-f]+$/ );
var re2 = new RegExp( /^([0-9A-Fa-f]{2})+$/ );
if( re1.test(a) ){ alert("#1 = This is a hex value!"); }
if( re2.test(a) ){ alert("#2 = This IS a hex string!"); }
else { alert("#2 = This is NOT a hex string!"); }
請注意,在兩種情況下,“ 10”均返回TRUE。 如果傳入的字符串只有0-9,則您無法分辨,如果是十六進制值或十進制值,則很容易看出來,除非長度不一的字符串前面缺少零(十六進制值始終成對出現-即-低字節/高位字節)。 但是像“ 34”這樣的值都是完全有效的十進制或十六進制數字。 他們只是意味着兩件事。
還請注意,由於周期,無論您執行哪種測試,“ 3.14159265”都不是十六進制值。 但是,通過添加“ {2}”,您至少要確保它確實是一個十六進制字符串,而不是像十六進制字符串那樣看起來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.