Regex validation on email and password is not working - angular8

The validation is not working when I submit the code.
public loginForm: FormGroup;
public emailRegEx = '^[a-z0-9._%+-]+#[a-z0-9.-]+\.[a-z]{2,4}$';
public passwordRegEx = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$#$!%*?&])[A-Za-z\d$#$!%*?&].{8,}$';
constructor() { }
ngOnInit() {
this.loginForm = new FormGroup({
email: new FormControl("", [Validators.required,Validators.pattern(this.emailRegEx)]),
password: new FormControl("", [Validators.required,Validators.pattern(this.passwordRegEx)]),

You can use follow simple regex
email: `/[^#]+#[^\.]+\..+/g`
and password regex you can follow one of these regexes below.
(?=.*[a-z]): for The string must contain at least 1 lowercase alphabetical character
(?=.*[A-Z]): The string must contain at least 1 uppercase alphabetical character
(?=.*[0-9]): The string must contain at least 1 numeric character
(?=.[!##\$%\^&]): The string must contain at least one special character, but we are escaping reserved RegEx characters to avoid conflict
^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))): The string must contain at least 1 lowercase alphabetical and uppercase or at least 1 lowercase alphabetical and number

Related

How to replace string characters that are not in a reference list in kotlin

I have a reference string on which the allowed characters are listed. Then I also have input strings, from which not allowed characters should be replaced with a fixed character, in this example "0".
I can use filter but it removes the characters altogether, does not offer a replacement. Please note that it is not about being alphanumerical, there are ALLOWED non-alphanumerical characters and there are not allowed alphanumerical characters, referenceStr happens to be arbitrary.
var referenceStr = "abcdefg"
var inputStr = "abcqwyzt"
inputStr = inputStr.filter{it in referenceStr}
This yields:
"abc"
But I need:
"abc00000"
I also considered replace but it looks more like when you have a complete reference list of characters that are NOT allowed. My case is the other way around.
Given:
val referenceStr = "abcd][efg"
val replacementChar = '0'
val inputStr = "abcqwyzt[]"
You can do this with a regex [^<referenceStr>], where <referenceStr> should be replaced with referenceStr:
val result = inputStr.replace("[^${Regex.escape(referenceStr)}]".toRegex(), replacementChar.toString())
println(result)
Note that Regex.escape is used to make sure that the characters in referenceStr are all interpreted literally.
Alternatively, use map:
val result = inputStr.map {
if (it !in referenceStr) replacementChar else it
}.joinToString(separator = "")
In the lambda decide whether the current char "it" should be transformed to replacementChar, or itself. map creates a List<Char>, so you need to use joinToString to make the result a String again.

how to search for series of strings in a sentence in kotlin

I have an ArrayList of items. Each item has long strings for example
("The cat is in the hat","It's warm outside","It's cold outside")
what I am trying to do is search for a series of strings for example "It's outside" in any given order in the ArrayList above and it should find 2 of them.
This is what I tried:
fun clickItem(criteria: String) {
productList = productListAll.filter {it: Data
it.title.contains(criteria, ignoreCase = true)
}
} as ArrayList<Data>
This works fine when the words I am looking for are in sequence. However, I am trying to get strings in any given order. Does anyone know how to accomplish that?
We can do this by splitting title and criteria by whitespaces to create a set of words. Then we use containsAll() to check if title contains all of words from criteria. Additionally, we need to convert both of them to lowercase (or uppercase), so the search will be case-insensitive:
private val whitespace = Regex("\\s+")
fun clickItem(criteria: String): List<Data> {
val criteriaWords = criteria.lowercase().split(whitespace).toSet()
return productListAll.filter {
it.title.lowercase().split(whitespace).containsAll(criteriaWords)
}
}
Note that searching through text is not that trivial, so simple solutions will be always limited. For example, we won't find "it's" when searching for "it is", etc.

String comparison in TCL

I have a variable nodename = v445 and another variable nodepatch=v445-sctpsv
I want to compare as
if { $nodename == ???????} {
}
so here I just want to compare only part before certain - the second variable could contain more than one - in name, so I just want to extract equivalent string to nodename to compare with.
after string manipulation second part should come up like this:
if { $nodename == "v445"} {
proceed } else {
}
Try
set nodename v445
set nodepatch v445-sctpsv
if {[string match $nodename* $nodepatch]} {
proceed
} else {
}
string match does a glob-style match against a string, in this case the string that starts with the value in $nodename and contains zero or more characters is matched against the string $nodepatch.
If you need to ensure that the dash occurs, use string match $nodename-* $nodepatch instead.
Documentation: if, set, string

Validating a String Containing Parentheses

I have a question about a string containing parentheses. Let me suppose that a string variable cityname is #"Boston (Massachusetts). I wonder why Xcode doesn't recognize the string inside parentheses? In the following code, only the first case is true.
// cityname = #"Boston (Massachusetts)"
if ([cityname rangeOfString:#"Boston"].location==!NSNotFound){
// true
}
if ([cityname rangeOfString:#"Massachusetts"].location==!NSNotFound){
// false
}
if (cityname isEqualToString:#"Boston (Massachusetts)"){
}
How can I make it so that I can validate the entire string even with parentheses (and apostrophes, too?)?
Thank you,
Tom
This has nothing to do with parentheses. You want [cityname rangeOfString:#"Massachusetts"].location != NSNotFound, not [cityname rangeOfString:#"Massachusetts"].location == !NSNotFound. They do totally different things.

How to filter out some vulnerability causing characters in query string?

I need to filter out characters like /?-^%{}[];$=*`#|&#'\"<>()+,\. I need replace this with empty string if it is there in the query string. Please help me out. I am using this in ASP pages.
Best idea would be to use a function something along the lines of:
Public Function MakeSQLSafe(ByVal sql As String) As String
'first i'd avoid putting quote chars in as they might be valid? just double them up.
Dim strIllegalChars As String = "/?-^%{}[];$=*`#|&#\<>()+,\"
'replace single quotes with double so they don't cause escape character
If sql.Contains("'") Then
sql = sql.Replace("'", "''")
End If
'need to double up double quotes from what I remember to get them through
If sql.Contains("""") Then
sql = sql.Replace("""", """""")
End If
'remove illegal chars
For Each c As Char In strIllegalChars
If sql.Contains(c.ToString) Then
sql = sql.Replace(c.ToString, "")
End If
Next
Return sql
End Function
This hasn't been tested and it could probably be made more efficient, but it should get you going. Wherever you execute your sql in your app, just wrap the sql in this function to clean the string before execution:
ExecuteSQL(MakeSQLSafe(strSQL))
Hope that helps
As with any string sanitisation, you're much better off working with a whitelist that dictates which characters are allowed, rather than a blacklist of characters that aren't.
This question about filtering HTML tags resulted in an accepted answer suggesting the use of a regular expression to match against a whitelist: How do I filter all HTML tags except a certain whitelist? - I suggest you do something very similar.
I'm using URL Routing and I found this works well, pass each part of your URL to this function. It's more than you need as it converts characters like "&" to "and", but you can modify it to suit:
public static string CleanUrl(this string urlpart) {
// convert accented characters to regular ones
string cleaned = urlpart.Trim().anglicized();
// do some pretty conversions
cleaned = Regex.Replace(cleaned, " ", "-");
cleaned = Regex.Replace(cleaned, "#", "no.");
cleaned = Regex.Replace(cleaned, "&", "and");
cleaned = Regex.Replace(cleaned, "%", "percent");
cleaned = Regex.Replace(cleaned, "#", "at");
// strip all illegal characters like punctuation
cleaned = Regex.Replace(cleaned, "[^A-Za-z0-9- ]", "");
// convert spaces to dashes
cleaned = Regex.Replace(cleaned, " +", "-");
// If we're left with nothing after everything is stripped and cleaned
if (cleaned.Length == 0)
cleaned = "no-description";
// return lowercased string
return cleaned.ToLower();
}
// Convert accented characters to standardized ones
private static string anglicized(this string urlpart) {
string beforeConversion = "àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇ’ñ";
string afterConversion = "aAaAaAaAeEeEeEeEiIiIiIoOoOoOuUuUuUcC'n";
string cleaned = urlpart;
for (int i = 0; i < beforeConversion.Length; i++) {
cleaned = Regex.Replace(urlpart, afterConversion[i].ToString(), afterConversion[i].ToString());
}
return cleaned;
// Spanish : ÁÉÍÑÓÚÜ¡¿áéíñóúü"
}