# alphanumeric value sorting

How to do alphanumeric value sorting in javascript  or jquery

A10
B100
A2
AA1
32
11
A1

and the i want the result should be
A1
A2
A10
B2
B100
11
32
LVL 20
###### Who is Participating?

Commented:
Hi!
You can try the below one as well
the result of below is : 1,2,10,11,32,100,A1,A2,A10,AA1,AD200,B100

``````<script>
var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a,b) {
var aA = a.replace(reA, "");
var bA = b.replace(reA, "");
if(aA === bA) {
var aN = parseInt(a.replace(reN, ""), 10);
var bN = parseInt(b.replace(reN, ""), 10);
return aN === bN ? 0 : aN > bN ? 1 : -1;
} else {
return aA > bA ? 1 : -1;
}
}

document.write(testCode);

</script>
``````

Thanks!
0

Sr. AnalyticsCommented:
This will give proper sorting for values like A1, A2, A3, etc as well as values without a street number.

``````function naturalSorter(as, bs){
var a, b, a1, b1, i= 0, n, L,
rx=/(\.\d+)|(\d+(\.\d+)?)|([^\d.]+)|(\.\D+)|(\.\$)/g;
if(as=== bs) return 0;
a= as.toLowerCase().match(rx);
b= bs.toLowerCase().match(rx);
L= a.length;
while(i<L){
if(!b[i]) return 1;
a1= a[i],
b1= b[i++];
if(a1!== b1){
n= a1-b1;
if(!isNaN(n)) return n;
return a1>b1? 1:-1;
}
}
return b[i]? -1:0;
}
``````
Then
``````arr.sort(function(o1, o2) {
return naturalSorter(o1.t, o2.t);
});
``````
0

Commented:
HI!

Check if this helps.
``````<script>

var rte = testCode.sort();

document.write(rte);
</script>
``````

Thanks!
0

ArchitectAuthor Commented:
@navneethegde please check this test code .

Thanks @Monika but its sort number correctly but not alphanumeric value
0

Commented:
``````arr.sort(function(o1, o2) {
var a = o1.t.split(/(\d+|\D+)/).filter(function(s){return s!=""});
var b = o2.t.split(/(\d+|\D+)/).filter(function(s){return s!=""});
for (var cmp = 0, i = 0; 0 == cmp && i < a.length && i < b.length; i++) {
var n1 = a[i] - 0, n2 = b[i] - 0;
if (!isNaN(n1) && !isNaN(n2))
cmp = n1 - n2;
else if (a[i] < b[i])
cmp = -1;
else if (a[i] > b[i])
cmp = 1;
}
return cmp;
})
``````
0

Commented:
here it is
``````1,10,100,11,2,32,A1,A10,A2,AA1,AD200,B100
``````
0

IT ExpertCommented:
@navneethegde did you read the question?

and the I want the result should be
A1
A2
A10
B2
B100
11
32
0

IT ExpertCommented:
My suggestion

JSFIDDLE

``````function rxIndexOf(rx,arr) { for (var i in arr) {if (arr[i].toString().match(rx)) { return i; }} return -1; }
function splitAlp(str) { return {num  : str.replace(/[^0-9]+/ig,"")||"",alph : str.replace(/[0-9]/g,"") ||"" }}
function numSort(a,b) { if (a===b) return 0; return parseInt(a,10)>parseInt(b,10)?1:-1; }

function alpSort(a,b) {
if (a===b) return 0;
var a1 = splitAlp(a);
var b1 = splitAlp(b);
if (a1.alph>b1.alph && parseInt(a1.num,10)>parseInt(b1.num,10)) return 1;
if (a1.alph==b1.alph && parseInt(a1.num,10)>parseInt(b1.num,10)) return 1;
return -1;
}
var alp,num;
var idx = rxIndexOf(/[a-zA-Z]/,arr);
if (idx !=-1) {
num = arr.slice(0,idx).sort(numSort);
arr = arr.slice(idx).sort(alpSort);
}
if (num) arr=arr.concat(num);
``````
0