Alternate Solution to RegExp Problem?

I think this is also another valid solution to the challenge, and doesn’t need the starting ^.

let username = "JackOfAllTrades";
let userCheck = /([a-z])([a-z]+|[0-9][0-9]+)$[0-9]*/i; // Change this line
let result = userCheck.test(username);

Challenge:

If you don’t specify starting ^ you don’t check the start of the string:

userCheck.test('0a00');
userCheck.test('!@#$%arjunnnij');
// etc...

So it’s not a valid solution, it’s a valid hack of insufficient tests

1 Like

Got it, thanks for the example!

Please include the use of parentheses in the curriculum.
This seems to work:
let userCheck = /^[A-z][\d][\d]+$|^[A-z][A-z]+\d*$/;

this works too, not sure if its ok
let userCheck = /^[\D]([\d]{2,}|[\D]+\d*)$/i

This one worked for me: /(^\D{2,}$)|(^\D+\d{2,}$)/

The breakdown for me was:

  1. If it must start with a letter, then I should use ^\D.
  2. Since I know that the minimum length is 2 and that requires 2 letters, then the first thing I need to check for is ^\D{2,} at a minimum.
  3. In all other cases, I know that the username must start with a letter and, if it has a number, it needs to end with the number. In this case, I figured that ^\D+\d{2,}$ would be the best option.
  4. Since these are two different scenarios for the username, and I didn’t want to have one that was super long, I used the | to say that it could be either.

Not sure if this will work for all scenarios, but it worked for this one.

Wrongly sorted. This problem is out of sequence, it requires the use of “number of matches” among other things that are only seen later.

Following code will help :-

let username = "JackOfAllTrades";
let userCheck = /^[a-z](\d\d+|\D+\d*)$/i;
let result = userCheck.test(username);

let username = "JackOfAllTrades";
const userCheck = /^[a-z]([0-9]{2,}|[a-z]+\d*)$/i;
let result = userCheck.test(username);

Code Explanation

  1. ^ - start of input
  2. [a-z] - first character is a letter
  3. [0-9]{2,0} - ends with two or more numbers
  4. | - or
  5. [a-z]+ - has one or more letters next
  6. \d* - and ends with zero or more numbers
  7. $ - end of input
  8. i - ignore case of input

Hi, need an explanation on why the suggested solution matches the string “JACK” although we specified (no. 6 - and ends with zero or more numbers) it to end with a number? Also, where does the check for the numbers, in the strings, “BadUs3rnam3” and “c57bT3”, that are not in the end, happens? Thanks in advance.

“JACK” ends in zero numbers, so it is a match.

Here:

([0-9]{2,}|[a-z]+\d*)$

Thanks you :pray:t2: