I'm trying to validate text with javascript but can find out why it's not working.
I have been using : https://regex101.com/ for testing where it works but in my script it fails
var check = "test"
var pattern = new RegExp('^(?!\.)[a-zA-Z0-9._-]+$(?<!\.)','gmi');
if (!pattern.test(check)) validate_check = false;else validate_check = true;
What i'm looking for is first and last char not a dot, and string may contain [a-zA-Z0-9._-]
But the above check always fails even on the word : test
+$(?<!\\.)
is invalid in your RegEx
$
will match the end of the text or line (with the m
flag ) (?<!Y)X
will match X
, but only if Y
is not before it What about more simpler RegEx?
var checks = ["test", "1-t.e_s.t0", ".test", "test.", ".test."]; checks.forEach(check => { var pattern = new RegExp('^[^.][a-zA-Z0-9\\._-]+[^.]$','gmi'); console.log(check, pattern.test(check)) });
Your code should look like this:
var check = "test"; var pattern = new RegExp('^[^.][a-zA-Z0-9\\._-]+[^.]$','gmi'); var validate_check = pattern.test(check); console.log(validate_check);
A few notes about the pattern:
^(?!.)[a-zA-Z0-9._-]+$(?<!.)
and the first negative lookahead will make the pattern fail if there is a character other than a newline to the right, that is why it does not match test
/i
flag for a case insensitive match, you can shorten [A-Za-z]
to just one of the ranges like [az]
or use \\w
to match a word character like in your character class(?<!\\.)
using a negative lookbehind is not invalid in your pattern, but is is not always supportedFor your requirements, you don't have to use lookarounds. If you also want to allow a single char, you can use:
^[\w-]+(?:[\w.-]*[\w-])?$
^
Start of string [\\w-]+
Match 1+ occurrences of a word character or -
(?:
Non capture group
[\\w.-]*[\\w-]
Match optional word chars, a dot or hyphen )?
Close non capture group and make it optional$
End of string const regex = /^[\\w-]+(?:[\\w.-]*[\\w-])?$/; ["test", "abc....abc", "a", ".test", "test."] .forEach((s) => console.log(`${s} --> ${regex.test(s)}`) );
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.