1

正規表現を使用して次のテキストを検証したい

integer(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('');
            } 
     }  
 }            

しかし、それは機能していません

これを正しくするために誰か助けてください

4

3 に答える 3

1

とにかく、あなたが試みた表現が、あなたが私たちに与えた説明にどのように関係しているのかわかりません. あなたが欲しいのは

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

あなたは正規表現について少し知っているように見えるので、段階的な説明はしません :-)

「整数」一致からゼロを除外する必要がある場合は、[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、ログ) から 2 つの関数に分離することをお勧めします。

于 2013-09-11T13:34:30.593 に答える
1

これはそれを行う必要があります:

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

あなたは近づいていましたが、基本的な正規表現の理解が欠けているようです。

まず、文字列全体^$一致していることを確認してください。そうしないと、前後のジャンクが有効と見なされます。

この形式[1-9]\d*では、1 以上の任意の整数 (および任意の桁数) を使用できます。

(?:fs|sf)両方のオプションを許可するための代替 (?:グループを非キャプチャーにすること) です。

[-+]および[hmd]そこにある文字のいずれかと一致できる文字クラスです。

その最後iは、文字を小文字または大文字にすることができます。

于 2013-09-11T13:34:43.373 に答える
0

次のようなことを試してください:

/^\d+(?:fs|sf)[-+]\d+[hmd]$/i
于 2013-09-11T13:33:23.050 に答える