111111111 - Invalid
A121278237 - Invalid
7777777777 - Invalid
121263263 - Valid
111111112 - Valid
^([0-9])(?!\1+$)[0-9]+$
should work. It needs a string of at least two digits to match successfully.
Explanation:
Match a digit and capture it into backreference #1: ([0-9])
Assert that it's impossible to match a string of any length (>1) of the same digit that was just matched, followed by the end of the string: (?!\\1+$)
Then match any string of digits until the end of the string: [0-9]+$
EDIT: Of course, in Java you need to escape the backslash inside a string ( "\\\\"
).
Building on Tim's answer, you eliminate the requirement of "at least two digits" by adding an or clause.
^([0-9])(?!\1+$)[0-9]+$|^[0-9]$
For example:
String regex = "^([0-9])(?!\\1+$)[0-9]+$|^[0-9]$";
boolean a = "12".matches(regex);
System.out.println("a: " + a);
boolean b = "11".matches(regex);
System.out.println("b: " + b);
boolean c = "1".matches(regex);
System.out.println("c: " + c);
returns
a: true
b: false
c: true
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.