2012-04-13 4 views
2

Ich bin auf der Suche nach Regex, die "a", "p", "a", "" p "," am "," pm "," am "," pm ".Regex zu einem der folgenden - "a", "p", "am", "pm", usw.

Beachten Sie, dass was ich suche Whitespace Agnostic ist. Ich habe eine Regex Gruppierung innerhalb einer Zeichenkette, was ich jetzt habe, dass nicht für eine/m/am/pm arbeitet, ist dies:

/^(\d{1,2}):(\d{2})(\s(am|pm|a|p)$)/i;

Antwort

4
/^(\d{1,2}):(\d{2})(\s*[ap]m?)$/i 

Die wichtigste Änderung ist der Stern (*) nach \s. Es bedeutet - erlaube eine beliebige Anzahl von Leerzeichen oder keine Leerzeichen.

2

Versuchen Sie, diese zu ändern ...

\s(am|pm|a|p) 

dazu ...

\s?(am|pm|a|p) 

Die ? macht das Leerzeichen optional. Sie könnten auch * anstelle von ? verwenden, wenn Sie möglicherweise mehrere Leerzeichen zulassen möchten.

2

Hier ist eine, die durch Leerzeichen Agnostiker:

/^\s*(\d{1,2})\s*:\s*(\d{2})\s*([ap]m?)\s*$/i 

Spiele:

  • 1:23 PM
  • 01:03 A
  • 10:50 pm
  • 12:20 p
  • usw.