841

I want to delete the first character of a string, if the first character is a 0. The 0 can be there more than once.

Is there a simple function that checks the first character and deletes it if it is 0?

Right now, I'm trying it with the JS slice() function but it is very awkward.

nicael
19.1k13 gold badges65 silver badges93 bronze badges
asked Dec 30, 2010 at 16:39

17 Answers 17

1357

You can remove the first character of a string using substring:

var s1 = "foobar";
var s2 = s1.substring(1);
alert(s2); // shows "oobar"

To remove all 0's at the start of the string:

var s = "0000test";
while(s.charAt(0) === '0')
{
 s = s.substring(1);
}
Max
7882 gold badges8 silver badges25 bronze badges
answered Dec 30, 2010 at 16:48
Sign up to request clarification or add additional context in comments.

9 Comments

@Stephen: In this case, it wouldn't make a difference because charAt always returns a string, even if the index exceeds the index of the last character, so there's no type coercion performed, and the algorithm ends up being identical. But I do prefer === over == even when it doesn't make a difference. ;)
@Hejner: If the types are the same, as they always would be in this case, then === and == perform precisely the same steps (according to the spec, at least), so there is no reason to expect one to perform better than the other.
@MiguelCoder. According to the spec, the steps are the same (browser implementations may differ, of course). Read it if you don't believe me.
@ReallyNiceCode putting aside the fact that the question was asked over 8 years ago. It was stated "The 0 can be there more than once." and the asker accepted my solution.
Although still valid, you should update your reply, by replacing substr with substring. Check MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
|
253

Very readable code is to use .substring() with a start set to index of the second character (1) (first character has index 0). Second parameter of the .substring() method is actually optional, so you don't even need to call .length()...

TL;DR : Remove first character from the string:

str = str.substring(1);

...yes it is that simple...

Removing some particular character(s):

As @Shaded suggested, just loop this while first character of your string is the "unwanted" character...

var yourString = "0000test";
var unwantedCharacter = "0";
//there is really no need for === check, since we use String's charAt()
while( yourString.charAt(0) == unwantedCharacter ) yourString = yourString.substring(1);
//yourString now contains "test"

.slice() vs .substring() vs (削除) .substr() (削除ここまで)

EDIT: (削除) substr() (削除ここまで) is not standardized and should not be used for new JS codes, you may be inclined to use it because of the naming similarity with other languages, e.g. PHP, but even in PHP you should probably use mb_substr() to be safe in modern world :)

Quote from (and more on that in) What is the difference between String.slice and String.substring?

He also points out that if the parameters to slice are negative, they reference the string from the end. Substring and substr doesn ́t.

answered May 21, 2015 at 17:44

Comments

111

Use .charAt() and .slice().

Example: http://jsfiddle.net/kCpNQ/

var myString = "0String";
if( myString.charAt( 0 ) === '0' )
 myString = myString.slice( 1 );

If there could be several 0 characters at the beginning, you can change the if() to a while().

Example: http://jsfiddle.net/kCpNQ/1/

var myString = "0000String";
while( myString.charAt( 0 ) === '0' )
 myString = myString.slice( 1 );
Zsolt Meszaros
23.3k19 gold badges60 silver badges70 bronze badges
answered Dec 30, 2010 at 16:42

2 Comments

Works great. Plus, .substr is deprecated.
const pathnameStandardized = pathname.charAt(0) === '/' ? pathname.slice(1) : pathname
91

The easiest way to strip all leading 0s is:

var s = "00test";
s = s.replace(/^0+/, "");

If just stripping a single leading 0 character, as the question implies, you could use

s = s.replace(/^0/, "");
answered Dec 30, 2010 at 17:13

Comments

28

You can do it with substring method:

let a = "My test string";
a = a.substring(1);
console.log(a); // y test string
answered Dec 30, 2017 at 22:16

Comments

25

One simple solution is to use the Javascript slice() method, and pass 1 as a parameter

let str = "khattak01"
let resStr = str.slice(1)
console.log(resStr)

Result : hattak01

KillerKode
9972 gold badges12 silver badges32 bronze badges
answered Apr 12, 2021 at 14:50

Comments

23

Did you try the substring function?

string = string.indexOf(0) == '0' ? string.substring(1) : string;

Here's a reference - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substring

And you can always do this for multiple 0s:

while(string.indexOf(0) == '0')
{
 string = string.substring(1);
}
mikemaccana
126k113 gold badges441 silver badges544 bronze badges
answered Dec 30, 2010 at 16:40

Comments

13

const string = '0My string';
const result = string.substring(1);
console.log(result);

You can use the substring() javascript function.

Michael M.
11.2k11 gold badges22 silver badges46 bronze badges
answered May 11, 2021 at 15:56

Comments

9
var s = "0test";
if(s.substr(0,1) == "0") {
 s = s.substr(1);
}

For all 0s: http://jsfiddle.net/An4MY/

String.prototype.ltrim0 = function() {
 return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();
answered Dec 30, 2010 at 16:41

2 Comments

Yeah, this would work, if only one 0 is in the string. But i need it also if the String looks like var s = "00test0"; then only the first two 0 had to be replaced
Why not charAt? Why the brackets? Why a prototype extension? Yuck.
6
//---- remove first and last char of str 
str = str.substring(1,((keyw.length)-1));
//---- remove only first char 
str = str.substring(1,(keyw.length));
//---- remove only last char 
str = str.substring(0,(keyw.length));
Mureinik
316k54 gold badges398 silver badges405 bronze badges
answered Mar 27, 2014 at 13:27

Comments

5

Another alternative answer

str.replace(/^0+/, '')
Syscall
19.8k10 gold badges44 silver badges60 bronze badges
answered Jan 25, 2023 at 10:24

Comments

4

try

s.replace(/^0/,'')

console.log("0string =>", "0string".replace(/^0/,'') );
console.log("00string =>", "00string".replace(/^0/,'') );
console.log("string00 =>", "string00".replace(/^0/,'') );

answered Mar 29, 2019 at 16:38

Comments

3

Here's one that doesn't assume the input is a string, uses substring, and comes with a couple of unit tests:

var cutOutZero = function(value) {
 if (value.length && value.length > 0 && value[0] === '0') {
 return value.substring(1);
 }
 return value;
};

http://jsfiddle.net/TRU66/1/

answered Dec 30, 2010 at 16:53

Comments

3

String.prototype.trimStartWhile = function(predicate) {
 if (typeof predicate !== "function") {
 	return this;
 }
 let len = this.length;
 if (len === 0) {
 return this;
 }
 let s = this, i = 0;
 while (i < len && predicate(s[i])) {
 	i++;
 }
 return s.substr(i)
}
let str = "0000000000ABC",
 r = str.trimStartWhile(c => c === '0');
 
console.log(r);

answered Dec 30, 2010 at 16:45

Comments

1

Another alternative to get the first character after deleting it:

// Example string
let string = 'Example';
// Getting the first character and updtated string
[character, string] = [string[0], string.substr(1)];
console.log(character);
// 'E'
console.log(string);
// 'xample'
answered Jul 3, 2020 at 15:52

Comments

0

From the Javascript implementation of trim()> that removes and leading or ending spaces from strings. Here is an altered implementation of the answer for this question.

var str = "0000one two three0000"; //TEST 
str = str.replace(/^\s+|\s+$/g,'0'); //ANSWER

Original implementation for this on JS

string.trim():
if (!String.prototype.trim) {
 String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/g,'');
 }
}
answered Feb 3, 2014 at 4:27

1 Comment

we don't consider confusion an implementation problem, however, it is often attributed to a capacity deficiency of keeping up with the variables your environment presents to you. In this case, your neural connections are incapable of handling the necessary understanding of this altered adoption of a native js function implementation as an answer to the original question.
-1
var test = '0test';
test = test.replace(/0(.*)/, '1ドル');
answered Dec 30, 2010 at 16:46

1 Comment

This doesn’t perform as expected and is also really inefficient.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.