\w{8,8} (mellem 8 og 8 tegn) kan du forkorte til \w{8} (præcis 8 tegn). \w tillader, udover tal og bogstaver, også tegnet _.
Da du gerne vil teste dit input på to forskellige måder, hvor den skal passe med et pattern X og ikke må passe med et pattern Y, så brugte jeg denne metode:
(?=X)(?!Y)
Først tjekker den om dit input passer med X, og så starter den forfra med at tjekke at dit input ikke passer med Y. Der er en længere forklaring på hvordan (?=u) og (?!u) fungerer her:
http://www.regular-expressions.info/lookaround.htmlDu kunne også teste dit input to gange, først positivt for:
^\w{8}$
og bagefter tjekker du at den ikke har 8 ens cifre og ikke starter med 123:
^(0{8}|1{8}|2{8}|3{8}|4{8}|5{8}|6{8}|7{8}|8{8}|9{8}|^123.*)$
Jeg ved ikke om det kan gøres meget simplere. Der er så mange muligheder med regex, men det bliver lidt svært når den skal opfylde et krav og ikke må opfylde et andet. :)