Jump to content

Preg_match - expressoes regulares


kof20012
 Share

Recommended Posts

boa noite,

Estou neste momento a tentar estudar esta função, mas não consigo entender algumas coisas.

Acima de tudo vou só explicar o que já entendi:

Código:

if(!preg_match('/[00-23]{1}:[00-59]{1}/', '00:00')){

Vou fazer uma validação de hora, em primeiro lugar deve-se colocar uma '/' no inicio e no fim (li que vinha do pearl). de a string tem que ser do formato de 00 a 23 - 00 a 59 onde só pode encontra uma vez  '{1}', correcto?

Neste momento ele está a verificar bem as horas, caso coloque um simbolo antes como por exemplo '-00:00' ou '00:00-' ele aceita. A minha duvida é não aceitar simbolos nem antes nem depois (já sei que para a negação será [^...], (... é expressao)

Abraços

Link to comment
Share on other sites

Eh lá, se isso está a funcionar bem... não devia, que a expressão regular está errada!

O que estás a fazer com, por exemplo, [00-23]{1}, é aceitar um e só um dígito que seja 0 ou entre 0 e 2 ou o 3. De forma análoga para os minutos...

O que tens de fazer é (([01][0-9])|(2[0-3])):[0-5][0-9]. A explicação correspondente é: um dígito 0 ou 1 e um dígito de 0 a 9 ou o dígito 2 e um dígito de 0 a 9, dois pontos, um dígito de 0 a 5 e um dígito de 0 a 9.

Depois, para garantires que não apanhas mais nada sem ser a data, podes colocar âncoras de início e de fim (os símbolos ^ e $, respectivamente), o que obriga a que o match seja à string inteira:

if (preg_match('/^(([01][0-9])|(2[0-3])):[0-5][0-9]$/', '00:00')) {

Finalmente, e só como esclarecimento, o símbolo / é o delimitador, mas podes usar outro, se te der mais jeito (por exemplo, se tiveres que fazer matches com muitos / é mais fácil mudar o delimitador do que escapar cada um dos símbolos depois).

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.