-2

我有一个显示来自数据库的信息的表。由于我们数据库的设置方式,日期必须以 dd/mm/yyyy 格式保存,但我们的客户希望某些日期仅显示在 mm/yyyy 格式中。我们不能更改生成表的 PL/SQL,也不能更改数据库结构/预期格式,因为数据库是整体产品的一部分。因此,我需要遍历页面上的所有锚元素,检查文本值是否与格式 dd/mm/yyyy 匹配,如果是,则运行一个子字符串来删除前 3 个字符,而不管它们是什么,只留下 mm/yyyy。

到目前为止,我已经尝试了以下代码:

    $('table.work_section tr td a').each(function(){
        var regEx = new RegExp("^\d{1,2}\/\d{1,2}\/\d{4}$");
            if($(this).text().match(regEx) != null){
               var newText = $(this).substring(3);
               $(this).text(newText);
         }  
    })

不幸的是,这似乎不起作用。有谁知道为什么?我的完整代码可以在这个小提琴中找到:

http://jsfiddle.net/ehbSQ/23/

我还需要日期格式的正则表达式示例:01-OCT-2007

任何帮助将不胜感激,因为我讨厌正则表达式。

4

3 回答 3

1

这是一个非常长的正则表达式。你可以简单地使用这个正则表达式:

var regEx = new RegExp("^\d{1,2}\/\d{1,2}\/\d{4}$");

您的完整代码:

$('table.work_section tr td a').each(function(){
    var regEx = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
    if( regEx.test( $(this).text() ) ) {
       var newText = $(this).text().substring(3);
       $(this).text(newText);
    }  
})

JSFiddle

于 2013-10-30T12:01:10.827 回答
1

代码的问题是:

  • 当您使用字符串构造正则表达式对象时,您需要对字符串中的所有反斜杠进行转义。
  • 您正在使用未定义的变量$this而不是$(this).
  • RegExp当您尝试使用变量时,您正在使用regEx
  • var你在最后一个作业前面有一个额外的。

还:

  • 该正则表达式旨在验证日期,但您应该使用更简单的表达式,因为您只想识别日期。
  • 您可以使用该test方法找出正则表达式是否匹配,而不是进行完全匹配并评估结果。
  • 在循环外创建正则表达式对象。

所以:

var regEx = new RegExp("^\\d+/\\d+/\\d+$");
$('table.work_section tr td a').each(function(){
  if(regEx.test($(this).text())){
    var newText = $(this).text().substring(3);
    $(this).text(newText);
  }  
});

演示:http: //jsfiddle.net/Guffa/ehbSQ/31/

于 2013-10-30T12:14:03.387 回答
0

您的代码存在多个问题。

  1. table.work_section > tr > td > a的选择器没有正确选择元素(据我了解)

  2. 您的正则表达式未在字符串中正确转义。

  3. 你的代码是错误$this.text()的使用 this '$(this).text()' 而不是var $this.text(newText);使用$(this).text(newText);

有关详细信息,请参见此处。工作jsfiddle

于 2013-10-30T12:27:40.797 回答