2012-01-11 9 views
13

Sono frustrato da un'espressione regolare per mascherare il campo di input. Voglio limitare l'input al formato hh: mm AM | PM e non riesco a far funzionare questa regex.Regex per il formato ora AM PM per jquery

Io uso questa espressione regolare in combinazione con uno strumento jquery da www.ThimbleOpenSource.com. Era lo strumento filter_input.js o qualsiasi altra cosa.

Sembra funzionare per una semplice espressione regolare ma quello che ho trovato non sembra funzionare. Questo è il mio link test jsFiddle qui sotto.

jsFiddle

+1

Il regex che hai nel tuo violino è solo "[a-z]' ... ti aspetti che sia il filtro corretto? Hai provato a googling regex per i formati temporali? – ean5533

+0

La domanda è quello che vuoi. Questo plugin filter_input sembra controllare l'input per ogni battitura. Ma allora non puoi controllare un timeformat. Se si desidera controllare il timeformat come descritto, è necessario verificare il valore dei campi di input su sfocatura o su invio del modulo (ad esempio). – Armin

+1

Se hai ragione una regexp come/[0-2] [0-9]: [0-1] [0-9] AM | PM /, quando l'utente scriverà qualcosa nella casella di input lo script proverà ad abbinare il suo primo input da tastiera con l'intera regexp.Quindi se scrivi come primo input da tastiera "2" lo script proverà ad abbinare "2" con/[0-2] [0-9]: [0-1] [0-9] AM | PM/e non è corretta. Filter_input può funzionare solo con espressioni regolari semplici. – Kakawait

risposta

23

ho fatto un esempio jsfiddle, in base all'espressione regolare della risposta von Yuri: http://jsfiddle.net/Evaqk/

$('#test1, #test2').blur(function(){ 
    var validTime = $(this).val().match(/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/); 
    if (!validTime) { 
     $(this).val('').focus().css('background', '#fdd'); 
    } else { 
     $(this).css('background', 'transparent'); 
    } 
}); 
2

Prima di tutto, se si utilizza per campo di inserimento, si dovrebbe mai lasciare la data di ingresso degli utenti o informazioni di tempo utilizzando i campi di testo e sperando che sia in formato rigoroso.

Ma, se insistete:

/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/ 

Questa espressione regolare convaliderà volta in formato AM/PM.

+0

Questo non sembra funzionare con la funzione jsFiddle che ho – SoftwareSavant

+0

Bene, come è stato scritto nel commento da @Kakawait, mentre gira su keypress, può essere usato solo per evitare caratteri non validi nel campo, non per il formato valido. Con la tua funzione puoi solo specificare i caratteri: '[0-9: APM]' – YuS

2

Non si può fare che con quel plug-in perché qui è necessario controllare ogni personaggio.

HTML:

<form> 
    <p>When?</p> 
     <input type="text" id="test1" placeholder="hh:mm(AM|PM)"/> 
</form> 

JavaScript:

$("#test1").keypress(function(e) { 
    var regex = ["[0-2]", 
    "[0-4]", 
    ":", 
    "[0-6]", 
    "[0-9]", 
    "(A|P)", 
    "M"], 
    string = $(this).val() + String.fromCharCode(e.which), 
    b = true; 
    for (var i = 0; i < string.length; i++) { 
     if (!new RegExp("^" + regex[i] + "$").test(string[i])) { 
      b = false; 
     } 
    } 
    return b; 
}); 

+0

Ehi, dovremmo trasformarlo in un sempliceMaskPluggin! – SoftwareSavant

1

quindi sono abbastanza sicuro che questo è risolto ormai, ma mi è stato recentemente alle prese con questo e non poteva trova una risposta abbastanza veloce. Sto usando Bootstrap Validator (bootstrapvalidator.com di @nghuuphuoc) in combinazione con DateTimepicker di Eonasdan per convalidare un'ora (PS: puoi disabilitare la data nel plugin di Eonasdan).

Dato che Bootstrap Validator non ha ancora un validatore per il tempo, è necessario utilizzare un Regex. Questo ha funzionato perfettamente per me:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9] [APap][mM]$

+0

Se hai bisogno di AM o PM, allora non ha senso permettere l'ora> 12. – chad

+0

Dovresti limitare le ore al di sopra di 12, quindi la regex dovrebbe essere qualcosa come: '(0? [1-9] | 1 [0-2]): [0-5] [0-9]? [APap] [mM] $ ' – lucasarruda

0

la funzione di ritorno follwing (false true /) Valore

function CheckTime(HtmlInputElement) { 
     var dt = HtmlInputElement.value; 
     return (/(0?[1-9]|1[0-2]):[0-5][0-9] ?[APap][mM]$/.test(dt)); 
} 
0

controllare questa soluzione troppo.

<!DOCTYPE html> 
<html> 
<body> 

<p>This demo used to validate time with 12 hours format</p> 

<button onclick="myFunction()">Try it</button> 

<p id="demo"></p> 

<script> 
function myFunction() { 
    var regexp = /^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/; 
    var res = regexp.test('12:00 AM'); //try with alphabets or wrong format 
    document.getElementById("demo").innerHTML = res; 
} 
</script> 

</body> 
</html> 
Problemi correlati