Regex for AM-PM tidsformat for jquery

Jeg, at jeg bliver frustreret af at bruge et regulært udtryk til at skjule de input felt. Jeg ønsker at Begrænse input til hh:mm AM|PM-format, og jeg kan ikke få dette regex til at arbejde.

Jeg bruge denne regex i forbindelse med en jquery værktøj fra www.ThimbleOpenSource.com. Det var den filter_input.js værktøj eller hvad.

Det ser ud til at arbejde for et enkelt regulært udtryk, men det jeg kom op med, ikke synes at arbejde. Dette er min jsFiddle test linket nedenfor.

jsFiddle

Regex, du har i din violin er bare [a-z]… forventer du, at for at være det rette filter? Har du prøvet at google regulære udtryk for tid formater?
Spørgsmålet er, hvad du ønsker. Dette filter_input plugin ser ud til at tjekke input til hvert tastetryk. Men så kan du ikke kontrollere en timeformat. Hvis du ønsker at kontrollere timeformat som beskrevet, skal du kontrollere værdien af input felter på sløre eller på submit form (for eksempel).
Hvis du lige en regexp som /[0-2][0-9]:[0-1][0-9] AM|PM/, når brugeren vil skrive noget i input boksen scriptet vil forsøge at matche hans første tastatur med hele regexp. Så hvis du skriver som første tastatur-input “2” scriptet vil forsøge at matche “2” med /[0-2][0-9]:[0-1][0-9] AM|PM/ og det er ikke korrekt. Den filter_input kan kun arbejde med et enkelt regulært udtryk.
undskyld… det var den oprindelige regex, jeg havde… jeg lavede den for at se, om der var arbejde jsfiddle.net/KsvdK/6

OriginalForfatteren SoftwareSavant | 2012-01-11

6 svar

  1. 26

    Jeg har lavet en jsfiddle eksempel, baseret på regulære udtryk for svaret 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');
        }
    });

    OriginalForfatteren

  2. 2

    Først og fremmest, hvis du bruger det for input-feltet, at du bør aldrig lade brugerne input dato eller et klokkeslæt oplysninger ved hjælp af tekst-felter, og håber det vil ske i nøje format.

    Men hvis du insisterer:

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

    Dette regex vil validere tid i AM/PM-format.

    Dette synes ikke til at arbejde med jsFiddle Funktion, som jeg har
    Godt, som det var skrevet i en kommentar af @Kakawait, som det kører på tastetryk, og det kan kun bruges til at undgå ugyldige tegn i feltet, ikke for gyldigt format. Med din funktion, du kan kun angive de chars: [0-9:APM ]

    OriginalForfatteren

  3. 2

    Du kan ikke gøre det med det plugin, fordi her du skal kontrollere hver karakter.

    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;
    });

    Eksempel

    Hey, vi skal vende det til en simpleMaskPluggin!

    OriginalForfatteren

  4. 1

    Så jeg er temmelig sikker på, at dette er løst nu, men for nylig blev jeg kæmper med det og kunne ikke finde et svar hurtigt nok. Jeg ved hjælp af Bootstrap Validator (bootstrapvalidator.com @nghuuphuoc) i forbindelse med Eonasdan er DateTimepicker at validere en time (PS: Du kan deaktivere den dato i Eonasdan plugin).

    Da Bootstrap Validator endnu ikke har en validator for tiden, er du nødt til at bruge et Regulært udtryk. Denne ene fungeret perfekt for mig:

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

    Hvis du kommer til at kræve AM eller PM, så det giver ikke mening at give time > 12.
    Du bør begrænse timer over 12, så regex ville være noget i retning af: (0?[1-9]|1[0-2]):[0-5][0-9] ?[APap][mM]$

    OriginalForfatteren

  5. 0

    følgende funktion return (true/false) værdi

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

    OriginalForfatteren

  6. 0

    Tjek denne løsning også.

    <!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>

    OriginalForfatteren

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *