Prima di tutto, si dispone di una certa ridondanza:
^([0-8][0-9]|[9][0])°\s([0-4][0-9]|[5][9])'$
può diventare solo:
^([0-8][0-9]|90)°\s([0-4][0-9]|59)'$
successivo hai un problema di logica, nel secondo match, si sta corrispondenti 0-4 poi 0-9 (cioè 00-49) e poi di corrispondenza solo 59. È possibile modificare questo per:
^([0-8][0-9]|90)°\s[0-5][0-9]'$
da abbinare 00-59
Avanti diamo un'occhiata al vostro secondi modifica:
\s([0-4][0-9]|[5][9],[0-9])''$
Lo stesso problema di prima, solo che adesso che hai aggiunto un numero decimale, ma non a entrambi i lati della | in modo che corrisponderà solo su un lato, se possiamo risolvere questo problema, come abbiamo fissato l'ultimo otteniamo:
^([0-8][0-9]|90)°\s[0-5][0-9]'\s[0-5][0-9],[0-9]''$
successivo si hanno due virgolette singole invece di una doppia citazione, in modo da rimediare:
^([0-8][0-9]|90)°\s([0-5][0-9])'\s[0-5][0-9],[0-9]"$
Ora dobbiamo chiederci, la prima cifra è obbligatoria? Probabilmente no. Quindi contrassegnare come potenzialmente mancante utilizzando un ?
^([0-8]?[0-9]|90)°\s[0-5]?[0-9]'\s[0-5]?[0-9],[0-9]"$
Avanti, è la parte frazionaria del secondo obbligatoria? Probabilmente no, in modo da contrassegnare come potenzialmente mancante:
^([0-8]?[0-9]|90)°\s[0-5]?[0-9]'\s[0-5]?[0-9](,[0-9])?"$
Infine, sto supponendo che ogni parte tranne che per i gradi non è necessario, contrassegnarli come potenzialmente mancante:
^([0-8]?[0-9]|90)°(\s[0-5]?[0-9]')?(\s[0-5]?[0-9](,[0-9])?")?$
Ci sono altre cose puoi fare per migliorare questo Ma questo dovrebbe iniziare.
Potresti specificare "problemi" con valori concreti che sono stati erroneamente accettati o rifiutati? Sicuramente puoi semplicemente copiarli dai tuoi test? ;) –
'^ ([0-8] [0-9] | [9] [0]) ° \ s ([0-4] [0-9] | [5] [9]) '\ s ((?: [0-4] [0-9] | [5] [9]), [0-9]) '' $ 'Forse. Ma io non conosco il tuo motore. Quale lingua stai usando? – FrankieTheKneeMan
Sei sicuro che '" 'è uguale a' '' '? – Brian