开发者

Regular expression [Any number]

I need to test for "[any number]" in a string in javascript. how would i match it?

Oh, "[" and "]" also need to be matched.

so string like "[1]" or "[12345]" is a match.

Non match: "[23432" or "1]"

So for example:

$('.form .section .parent').find('input.text').each(function(index){
      $(this).a开发者_StackOverflowttr("name", $(this).attr("name").replace("[current]", "['"+index+"']"));
});

I need to replace input fields name: "items[0].firstname" to "items[1].firstname" thanks


UPDATE: for your updated question

variable.match(/\[[0-9]+\]/);

Try this:

variable.match(/[0-9]+/);    // for unsigned integers
variable.match(/[-0-9]+/);   // for signed integers
variable.match(/[-.0-9]+/);  // for signed float numbers


if("123".search(/^\d+$/) >= 0){
   // its a number
}


I always use the following regular expression to detect any kind of number in a string. Had no issues so far.

'(([\+\-]*\d*\.*\d+[eE])?([\+\-]*\d*\.*\d+))'

In detail:

'([\+\-]*\d*\.*\d+)'

to match a (non-)decimal number with(out) leading digits or sign

'([\+\-]*\d*\.*\d+[eE])?'

to match an exponential base before the number.

If there are brackets around required, you can add them inside or outside of the surrounding paranthesis:

'(\[([\+\-]*\d*\.*\d+[eE])?([\+\-]*\d*\.*\d+)\])'

In fact the surrounding paranthesis are not necessary, but i keep them to easier concatenate the expression with others.


var mask = /^\d+$/;
if ( myString.exec(mask) ){
   /* That's a number */
}


You can use the following function to find the biggest [number] in any string.

It returns the value of the biggest [number] as an Integer.

var biggestNumber = function(str) {
    var pattern = /\[([0-9]+)\]/g, match, biggest = 0;

    while ((match = pattern.exec(str)) !== null) {
        if (match.index === pattern.lastIndex) {
            pattern.lastIndex++;
        }
        match[1] = parseInt(match[1]);
        if(biggest < match[1]) {
            biggest = match[1];
        }
    }
    return biggest;
}

DEMO

The following demo calculates the biggest number in your textarea every time you click the button.

It allows you to play around with the textarea and re-test the function with a different text.

var biggestNumber = function(str) {
    var pattern = /\[([0-9]+)\]/g, match, biggest = 0;

    while ((match = pattern.exec(str)) !== null) {
        if (match.index === pattern.lastIndex) {
            pattern.lastIndex++;
        }
        match[1] = parseInt(match[1]);
        if(biggest < match[1]) {
            biggest = match[1];
        }
    }
    return biggest;
}

document.getElementById("myButton").addEventListener("click", function() {
    alert(biggestNumber(document.getElementById("myTextArea").value));
});
<div>
    <textarea rows="6" cols="50" id="myTextArea">
this is a test [1] also this [2] is a test
and again [18] this is a test. 
items[14].items[29].firstname too is a test!
items[4].firstname too is a test!
    </textarea>
</div>

<div>
   <button id="myButton">Try me</button>
</div>

See also this Fiddle!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜