正则表达式需要格式

时间:2013-09-11 13:29:06

标签: javascript regex

我想使用正则表达式验证以下文本

整数(1..any)/'fs'或'sf'/ +或 - /integer(1..any)/(h)或(m)或(d)

样品:

1) 8fs+60h
2) 10sf-30m
3) 2fs+3h
3) 15sf-20m

我试过这个

function checkRegx(str,id){
    var arr = strSplit(str);
    var regx_FS =/\wFS\w|\d{0,9}\d[hmd]/gi;

    for (var i in arr){
            var str_ = arr[i];
            console.log(str_);
            var is_ok = str_.match(regx_FS);
            var err_pos = str_.search(regx_FS);                
            if(is_ok){
              console.log(' ID from ok ' + id);
              $('#'+id).text('Format Error');
              break;
            }else{
              console.log(' ID from fail ' + id);
              $('#'+id).text('');
            } 
     }  
 }            

但它不起作用

请任何人帮助我做出正确的

3 个答案:

答案 0 :(得分:1)

我看不出你所尝试的表达方式与你给我们的描述有什么关系。你想要的是

/\d+(fs|sf)[+-]\d+[hmd]/

由于您似乎对regular expressions有点了解,我不会逐步解释: - )

如果您需要从“整数”匹配项中排除零,请改用[1-9]\d*。不确定是否通过“(1..any)”表示数字位数或数字本身。

查看代码,

function checkRegx(str, id) {
    var arr = strSplit(str);
    var regx_FS = /^\d+(fs|sf)[+-]\d+[hmd]$/i;

    for (var i=0; i<arr.length; i++) {
        var str = arr[i];
        console.log(str);
        if (regx_FS.test(str) {
            console.log(' ID from ok ' + id);
            $('#'+id).text('Format Error');
            break;
        } else {
            console.log(' ID from fail ' + id);
            $('#'+id).text('');
        } 
    }  
}
顺便说一下,最好将验证(正则表达式,数组拆分,迭代)与输出(id,jQuery,logs)分成两个函数。

答案 1 :(得分:1)

这应该这样做:

/^[1-9]\d*(?:fs|sf)[-+][1-9]\d*[hmd]$/i

你很亲密,但你似乎缺少一些基本的正则表达式理解。

首先,^$只是确保您匹配整个字符串。否则,之前或之后的任何垃圾都将被视为有效。

格式[1-9]\d*允许从1向上(和任意长度的数字)的任何整数。

(?:fs|sf)是一种替代方式(?:是使群组无法捕获)以允许两种选择。

[-+][hmd]是允许匹配其中任何一个字符的字符类。

最终i允许字母为小写或大写。

答案 2 :(得分:0)

尝试这样的事情:

/^\d+(?:fs|sf)[-+]\d+[hmd]$/i