Issue
The task is to exclude value if one contains :. The value also must include at least 1 word character.
matched string values are:
' h-73 \r\n\t'
' hey'
'hi '
'7'
not matched values are:
' \r\n\t' // neither letter not digit
' ' // neither letter not digit
' sds: \r\n\t' // :
To exclude : I'd use /^[^:]+$/ to filter word characters I'd use /\w+/.
I have no idea how to use them together in the same regex because scope of each condition should be whole string.
Solution
The regex that matches your specifications is
/^[^\w:]*\w[^:]*$/
Details:
^- start of string[^\w:]*- zero or more chars other than word and:chars\w- one word char[^:]*- any chars, zero or more occurrences, other than a colon$- end of string.
JavaScript demo:
const texts = [' h-73 \r\n\t',' hey','hi ','7',' \r\n\t',' ',' sds: \r\n\t'];
const re = /^[^\w:]*\w[^:]*$/;
for (const text of texts) {
console.log("'"+text+"'", '=>', re.test(text));
}
NOTE: You could also use /^[^:]*\w[^:]*$/, but this regex grabs non-colons from the start of string as many times as possible, and then backtracks to find a word char, which is less efficient. So, the \w in the first negated character class is welcome.
Answered By - Wiktor Stribiżew
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.