Regular Expressions JavaScript


2

Имам следната функция в JavaScript за валидиране на въведено User Name да се състои само от букви от азбуката:

function allLetter(uname){ 
                var letters = /^[A-Za-z]+$/;
                if(uname.value.match(letters)){
                           return true;
                }else{
                           alert('Username must have alphabet characters only');
                           uname.focus();
                           return false;
                }
}
 
Искам да знам това какво означава :
/^[A-Za-z]+$/
 
символ по символ  / слето това ^ след това [ и така нататък.
 
uname е параметъра който подавам на функцията което е въведения User Name.

в Уеб дизайн и UI технологии от Георги Илиев (0 точки)


Отговори



2

/^ - трябва да започва със

\w - цифра, буква или подчертавка (т.е. това _)

+ - всички срещания на гореописаното. До тук израза ще приеме всички букви, цифри и подчертавки, ако между тях няма нещо друго

([\.-] - в квадратните скоби е описано срещане на точка или тире (точката е ескейпната със \), т.е. това ще намери в email-а точка или тире

? - въпросителната означава търсенето да не е алчно. В regex повечето оператори са алчни, т.е. търсят докато не намерят нещо което е различно от това което търсят, най-грубо казано. Обратно ? след като намери един символ и спира, т.е. тук ще намери или една точка или едно тире

\w+) - това търси пак цифри, букви или подчертавки неограничен брой пъти

* - звездичката казва нещото в скобите да се намери нула пъти или повече, т.е. може и да го няма, може и да го има един път или много пъти. 

До тук откриваш изрази като pesho или pesho.pesho или pesho.pesho.pesho или pesho-pesho.pesho и т.н.

@ - проверява за наличие на @

\w+([\.-]?\w+)* - същото като това пред символа @

(\.\w - намира изрази започващи с точка следвана от цифра, буква или подчертавка

{2,3} - това указва цифрата, буквата или подчертавката да са два или три символа.

)+ - гореописаното да се повтори няколко пъти, но да го има задължително. Това е разликата между + и *. Така израза в скобите открива неща от рода на .com или .net или .a2b.a_m.bg и т.н.

$ - указва задължително да свърши с израз в скобите

regex е наистина необятно поле. Ако искаш поне малко да го разбереш може да погледнеш този сайт - клик Аз лично съм прочел целия му туториъл и все още не мисля, че разбирам regex на повече от 20 - 30%. Също така ползвам за тестове този сайт килк

п.п. ако искаш точния regex за порверка на email по стандарта RFC5322 (каквото и да е това) виж тук към края на статията един regex на десет реда - и само моля те не питай кое какво значи :)


от wnvko (3123 точки)


0
До колкото си спомням $ - да завършва със ^- означава да започва със
[A-Za-z]+ - да има символи от A-Z и от a-z които може да бъдат последвани от същите символи.

от nikolap (555 точки)


0
И защо след +$ няма нищо нали искам да завършва с нещо?

от Георги Илиев (0 точки)

0
След $ няма нищо, защото искаш да завършиш с някой от символите в класа, т.е. със символ измежду A-Z или a-z.

от varbanoff (2325 точки)


0
Квадратните скоби означават клас символи, т.е. символите A-Z и a-z. Символът ^ пред квадратните скоби означава, че търсиш класа символи в началото на текста, т.е. пред тях няма нищо друго. Символът + означава едно или повече срещания на предишният символ, а в случая – на символите от класа (A-Z и a-z). Символът $ означава, че търсиш предишния символ да е в края на текста, т.е. в случая търсиш след класа символи да няма нищо. Наклонените черти / означават начало и край на регулярния израз.
Примерно, съвпадат: "Pesho", "gosho", "iVaN".
Примерно, не съвпадат: " Pesho", "go6o", "iVaN ".
:)

от varbanoff (2325 точки)


0

Имам и друга функция за валидация но на email:

function ValidateEmail(uemail){
                   var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
                   if(uemail.value.match(mailformat)){
                             return true;
                   }else{
                             alert("You have entered an invalid email address!");
                             return false;
                   }
 
Какво в този случай значи :
 
 /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/

от Георги Илиев (0 точки)


2

Препоръчвам ти този сайт - клик, там лесно можеш да видиш какво точно прави всеки един символ от даден regex.


от ktsarnakliyski (1115 точки)


0

Аз пък бих ви препоръчал RegexBuddy, (платен е, но има Trial) хем си обясняваш кое какво прави докато си генерираш изразите, хем си е бибиотека от занания един вид, хем "знае" особенностите на имплементациите на регулярните изрази в различните езици и може един вид (не директно) да конвертира изрази от един език към друг, да ти ги копва като литерали (където се поддържат) или като стрингове.


от dimo.petrof (2887 точки)