Get only numbers after a certain character (#) with regex [closed] - php

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 4 years ago.
Improve this question
I have the following string:
#35+#36+#37+#38+#39+#40+#46+#47+#48+#49+#50+#51
How would I achieve getting only numbers after the #.
Also how can I get any numbers that have no # in front?

To match numbers preceded by # use (?<=#)\d+ (positive lookbehind
for #, then a non-empty sequence of digits).
To match numbers not preceded by # use (?<!\d|#)\d+ (negative lookbehind).
This time however the "forbidden" preceding char is either a # or a digit.
Of course, use both patterns with g (global) option.
If you want to process all numbers is a single loop and within this
loop detect, whether the number has a preceding #, you can use another
option, namely (#?)(\d+).
This pattern contains 2 groups:
optional # and
a sequence of digits.
Then, processing each match, read the number from group 2 and check group 1,
whether it contains the #.

Related

Why is the Regex for my product's code not working? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
I'm trying to do Regex code for product's code in VSCode's HTML. My product's code has the following conditions:
Required enter 6 characters
First 2 characters must be letter and uppercase
Next 4 characters must be numbers.
I have tried this regular expression and it doesn't work:
^[A-Z]{2}+\[0-9]{4}$
Your regex should be:
^[A-Z]{2}[0-9]{4}$
This corrects the escaping of your character class; that made it no longer a character class but a series of characters to match in the regex, ending with 4 ]s. The + also is not needed as the {2} is stating only 2 uppercase alpha characters are allowed.
You can also swap the [0-9] with \d which is the metacharacter for an integer. With PHP regexs you also need delimiters so something like:
/^[A-Z]{2}\d{4}$/
could be used in preg_match.

Check username with optional patterns [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
I want to check usernames in PHP which satisfy the following conditions:
Must start with alphabets (one or more)
Can contain letters (optional, any length), numbers (optional, any length) or underscore (optional, only one)
Must end with an alphanumeric character
Alphabets are case insensitive
How can I match this pattern using preg_match() function?
Here is the pattern that I tried. But I don't know how to set optional quantifiers:
^[a-z][a-z0-9_]*[a-z0-9]$
Your pattern almost works but it will allow more than one underscore. To prevent that, you may use the following pattern:
^[a-z][a-z0-9]*_?[a-z0-9]+$
Details:
^ # Beginning of the string.
[a-z] # Matches exactly one English letter.
[a-z0-9]* # Matches zero or more English alphanumeric character (i.e., letter or digit).
_? # Matches zero or one underscore characters.
[a-z0-9]+ # Matches one or more English alphanumeric characters.
$ # End of the string.
Note that in order to make this case-insensitive, you either need to use the i modifier (i.e., /pattern/i) or use a-zA-Z instead of just a-z in all the character classes.
References:
Regular Expression Quantifiers.
Case insensitivity.

Regex for letter and number combination for password [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 months ago.
Improve this question
I have a password field which needs to be validated on the backend and currently i have this regex pattern that checks if it is an alphanumeric
preg_match("/^[a-z0-9]+$/i", $sValue)
Right now I'm confused how can I required the password to be
Only letter is invalid
Only number is invalid
Must be a combination of number and letter.
in regex.
Any idea how can I implement it?
A simple way is
preg_match("/^(?!(?:[a-z]+|[0-9]+)$)[a-z0-9]+$/i", $sValue)
which disallows just a letter(s) or just a number(s)
^
(?!
(?: [a-z]+ | [0-9]+ )
$
)
[a-z0-9]+
$
Require at least a digit but disallow digits only while limiting the character set to alnum.
^(?!\d+$)[a-z]*\d[a-z\d]*$
(?!\d+$) at start look ahead for not only digits until end
[a-z]* any amount of alphas followed by at least one \d digit
[a-z\d]*$ any amount of alnum until $ end
See demo at regex101 (use with i caseless flag).

Check if the ninth number from the right id 5 using Regex [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
is it possible to check the ninth number from the right whether its 5 or not.
I want to check the 9th digit from the right is a five:
00966588696745
^-True
12088696748
^-False
is it possible ?
You can use a lookahead: 5(?=\d{8}$)
This will ensure that your test string contains a 5 followed by 8 digit and the end of the string.
A simple version of this would be as follows:
^5.{8}$
Explanation:
^ - start looking from beginning of the string
5 - you want to ensure that the string starts with 5
. - any character. But if you need to assure it is only digits you need to use \d instead (the \ is important)
{8} - you expect for 8 chars of any type (since we use dot: '.')
$ - means end of the string. This assures that you have exactly 8 chars before end of the string
I hope this answer is helpful and explains the parts inside the regexpr

limiting filter length in regex [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
Here I have regex, in which I want it to filter only word length >8 and <15 characters. I added
(?=.{8,14})b$
REGEX-http://regex101.com/r/sA5xL5
but it does not make any diff.
`^(?=.{8,14})b$\(?(?:(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?\(?(?:0\)?[\s-]?\(?)?|0)(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}|\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4}|\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3})|\d{5}\)?[\s-]?\d{4,5}|8(?:00[\s-]?11[\s-]?11|45[\s-]?46[\s-]?4\d))(?:(?:[\s-]?(?:x|ext\.?\s?|\#)\d+)?)$^|^2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-49]|8[01349])|21[0-7]|31[0-8]|[459]1\d|61[0-46-9]))\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\d)|3(?:0\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|4(?:0[03-9]|2[02-5789]|[37]\d|4[02-69]|5[0-8]|[69][0-79]|8[0-5789])|5(?:0[1235-9]|2[024-9]|3[0145689]|4[02-9]|5[03-9]|6\d|7[0-35-9]|8[0-468]|9[0-5789])|6(?:0[034689]|2[0-689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\d|9[2-57]))\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|4(?:044[1-7]|20(?:2[23]|8\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\d)|276\d|6(?:26[06-9]|686))|6(?:06(?:4\d|7[4-79])|295[567]|35[34]\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\d{3}|176888[234678]\d{2}|16977[23]\d{3}|7(?:[1-4]\d\d|5(?:0[0-8]|[13-9]\d|2[0-35-9])|624|7(?:0[1-9]|[1-7]\d|8[02-9]|9[0-689])|8(?:[014-9]\d|[23][0-8])|9(?:[04-9]\d|1[02-9]|2[0-35-9]|3[0-689]))\d{6}|76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])\d{6}|80(?:0\d{6,7}|8\d{7})|500\d{6}|(?:87[123]|9(?:[01]\d|8[0-3]))\d{7}|8(?:4[2-5]|70)\d{7}|70\d{8}|56\d{8}|(?:3[0347]|55)\d{8}|8(?:001111|45464\d)$|(?:\((\+?\d+)?\)|(\+\d{0,3}))? ?\d{2,3}([-\.]?\d{2,3} ?){3,4}`
please dont bother about regex length.
It matches even if match length exceeds
What is missing to restrain it to filer 8-14 length pattern match only.
First off, ^(?=.{8,14})b$ means "at the beginning of the string as asserted by ^, look ahead to see if we can find a single character between 8 and 14 times, and if yes, then match a single character b then the end of the line $. You cannot have one line that is both a single character b and 8 characters in length. This part of the expression can never match. See demo.
But your regex still finds an overall match. Why? Clearly, even if ^(?=.{8,14})b$ were able to match anything, it does not set a condition for the whole expression, because something later in the regex overrides it: an alternation (|) which means that we can match what's on the left OR what's on the right.

Categories