Regex无法在JavaScript中工作

Regex not working in JavaScript

本文关键字:工作 JavaScript Regex      更新时间:2023-09-26

我正在努力确保人们输入的格式正是这样的:

.match(/'d{1,2}:'d'd's((AM)|(PM))/)

意味着用户可以写:

12:30 AM
2:30 PM

但不是:

1:2 A
1:30
PM

它需要是前两个数字,后面跟着一个冒号,两个以上的数字,一个空格,以及AM或PM。但我的正则表达式不是这样的。我错过了什么?

到底是什么问题?

> "1:2 A".match(/'d{1,2}:'d'd's((AM)|(PM))/);
null
>"12:30 AM".match(/'d{1,2}:'d'd's((AM)|(PM))/);
["12:30 AM", "AM", "AM", undefined]

但是:

  1. 否则,您需要将表达式固定在字符串的开头(^)和结尾($);

    > "foo 12:30 AM foo".match(/'d{1,2}:'d'd's((AM)|(PM))/);
    ["12:30 AM", "AM", "AM", undefined]
    
  2. 看看RegExp.test(),它返回一个更简单的true/false,而不是一个数组。

    > /^'d{1,2}:'d'd's((AM)|(PM))$/.test("12:30 AM");
    true
    

做同样事情的一个更简单的表达式可以是/^'d{1,2}:'d{2} [AP]M$/

假设您在单行输入字段中检查它(而不是在文本区域中搜索它),您应该执行以下操作:

/^'d{1,2}:'d'd's[AP]M$/

这样的东西怎么样:

.match(/([0]?[1-9]|1[0-2])(:)[0-5][0-9]?( )?(AM|PM)/)

如果您的问题是换行符。你可以试试:

'12:30 
AM'.replace(/'n/, '').match(/'d{1,2}:'d'd's((AM)|(PM))/)

结合Matt、c0deNinja和我自己的想法,你最终应该得到:

/^(0?[1-9]|1[0-2]):[0-5][0-9]'s?[AP]M$/.test(input);

我已经在中尝试过您的代码http://www.regular-expressions.info/javascriptexample.html它奏效了。

顺便说一下,您还需要测试时间是否有效。您的代码现在可以接受这样的事情99:12AM,就好像它们是正确的一样。我建议你用这样的东西。

'b(1[0-2]|'d):[0-5][0-9]'s([aApP][mM])'b

=)

您的正则表达式似乎是正确的。结合上面的一些想法,你可以用Regex:测试你的字符串

^(1[0-2]|'d):[0-5]'d [aApP][mM]$

以及Javascript中的测试代码:

var regex = /^(1[0-2]|'d):[0-5]'d [aApP][mM]$/g; 
    var input = "2:30 PM"; 
    if(regex.test(input)) {
      var matches = input.match(regex);
      for(var match in matches) {
        alert(matches[match]);
      } 
    } else {
      alert("No matches found!");
    }