Tak więc, próbowałem napisać wyrażenie regularne o wartości typu opór, która zawiera pewną liczbę cyfr i co najwyżej jedną literę, ale zawsze jest to pewna liczba znaków total (użyjmy przykładu czteroznakowego kodu rezystancji).Lepszy sposób na wyrażenie regularne
Najpierw mógłbym zrobić '\d*[RKM]\d*'
, ale to pozwoliłoby na coś takiego jak 'R'
.
Mogę również zrobić coś takiego, jak '[\dRKM]{4}'
, ale pozwoli to na takie rzeczy, jak 'RRR4'
, które nie są wartością, której bym chciał.
'\d{1,4}[Rr]\d{0,3} | ([RKM]\d{3}) | (\d{4})'
, choć bardziej szczegółowe, nadal pozwalałoby na '1234R567'
, który nie jest czterema znakami.
Czy w zasadzie istnieje bardziej zwarty sposób pisania '[RKM]\d\d\d | \d[RKM]\d\d | \d\d[RKM]\d | \d\d\d[RKM] | \d\d\d\d'
?
Nie jestem pewien, czy będzie lubię to robić, ale może najlepszym sposobem sprawdzenia długości byłoby użycie otaczającego języka programowania. Nasza firma ma listę "typów sprawdzania poprawności" w pliku XML, a także, w każdym przypadku, wyrażenie regularne, pozwala ustawić minimalną/maksymalną długość. (W tym przypadku ustaw tylko na 4) – Katana314
'^ [RKM] \ d {3} | \ d [RKM] \ d {2} | \ d {2} [RKM] \ d | \ d {3} [RKM] | \ d {4} $ 'jest zbyt skomplikowane? Lub, jeśli szukasz w innym tekście: '\ b (?: [RKM] \ d {3} | \ d [RKM] \ d {2} | \ d {2} [RKM] \ d | \ d {3} [RKM] | \ d {4}) \ b " –