PHP: Урок за кодиране на формуляри за HTML поща / PHP Mail Send Scripting

Имам формуляр, в който искам имейл адреси. Обикновено бих използвал

<input type='email' ...> 

но искам да позволя на потребител да пише foo отколкото [email protected] в (вероятния) случай, че използват @mycompany.com имейл адрес. Има ли начин за заобикаляне на валидирането (ако форматът съвпада с този регулярен израз, приемете; в противен случай проверете нормално), или трябва просто да използвам

<input type='text' ...> 

и да игнорирате семантиката и т.н.?

Ако ще разрешите съдържание, което не е във валиден формат на имейл адрес, тогава ще искате да използвате <input type='text' ...> както ти каза. Въпреки че някой може въведете цял имейл адрес, той не е изключителен за това поле, така че използвайте <input type='email' ...> не би било подходящо.

Можете също да изключите проверката на формуляра, ако не искате браузърът да проверява тези полета вместо вас. Но този вид побеждава целта на използването на HTML5 функции.

  • Звучи добре, просто се уверете, че постъпвам правилно.
  • Изчакайте ... какво мислите за това формулярът да попълва автоматично имейл адреса и да използва type = "email"?
  • В такъв случай бих използвал <input type='email' ...> тъй като окончателното съдържание на това поле ще бъде валиден имейл адрес.
  • Добре, кодирано е и работи добре. Ако имат изключен Javascript, но имат браузър HTML5, ще трябва да попълнят имейла сами, но това всъщност не е лошо за ъгъла.

HTML5 позволява pattern='' атрибут, който трябва да бъде посочен:

Задава регулярен израз, срещу който UA има за цел да провери стойността на контролата, представена от нейния елемент.

Регуларен израз, който трябва да съответства на създаването на шаблон на JavaScript, както е посочено в [ECMA 262].

Примери:

<input type='email' pattern='[^ @]*@[^ @]*' value=''> <input type='email' id='email' name='email' placeholder='Enter your email address' pattern='^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$'> 

Но бих използвал type='text' за да бъдете на по-сигурна страна - в този случай можете да проверите ВСЯКО потребителско въвеждане.

  • -1 за предоставяне на регулярно изражение, което отхвърля валидни имейл адреси - linuxjournal.com/article/9585 - ex-parrot.com/pdw/Mail-RFC822-Address.html
  • @dmsnell Този пример е взет от уеб страница и не е написан от мен. Виновна съм, че не съм го проверила ... но на друг въпрос този въпрос не е за "как да правилно валидиране на имейл адрес от страна на клиента ". Като цяло изобщо да не се използва шаблон ще бъде по-добра идея (защо да се дублира функционалността (шаблон), ако вече е предоставена от браузъра), освен ако няма специфични изисквания.
  • @dmsnell: Разбира се, общата спецификация RFC 5322 дори не е редовна, така че истинският регулярен израз никога не може да я анализира. Той е поне пълен с Dyck, така че дори обратните препратки не са достатъчни (въпреки че мисля, че има конструкция на Perl, която би позволила такова разбор). Така че всеки pattern ще трябва или да приеме невалиден имейл адрес, или да отхвърли валиден.
  • @LazyOne: Знам, че този въпрос не е за това как да правилно потвърждавам имейл адреси, но коментарът ми беше за неправилно отхвърляне валиден вход. Даденият модел дори би отхвърлил някои валидни имейл адреси @ mycompany.com. Доста разочароващо е да въведете вашия имейл адрес във формуляр и той да се върне и да ви каже, че е невалиден.
  • 1 @dmsnell Напълно съм съгласен с вас. Когато започнах да работя на настоящата си работа, те ми дадоха много кратък имейл адрес (трябваше да е временен, но го използвах близо 2 години) - [email protected] (да, само една буква преди @). Когато се опитах да се регистрирам на някои сайтове (форуми, поддръжка на продукти и т.н.), той беше отхвърлен като невалиден доста пъти. В крайна сметка те ми създадоха псевдоним (като [email protected]), за да мога да го използвам вместо това.Все още използвам и двете - в зависимост от ситуацията.

Можете да използвате новия атрибут на шаблон HTML5, за да укажете валидни формати за поле за въвеждане с помощта на регулярно изражение на JavaScript, след което да поставите съобщението за грешка в title атрибут:

<input type='email' pattern='([regexp])' title='Your error message' /> 

В описания от вас сценарий обаче няма много предимство да го правите по този начин пред използването type='text' с изключение на факта, че потребителите на Mobile Safari ще видят имейл клавиатура вместо пълната qwerty.

Като такъв бихте могли да обмислите изискването да използвате фирмен адрес, да го добавите в обикновен текст след текстовото поле и да подканите потребителите за първата част от имейл адреса, а не за пълната версия.

  • pattern се игнорира във Firefox с type='email' в моите тестове.
  • @Charles Най-доброто за използване type='text' след това или просто изисквайте да въведат пълния си имейл адрес, включително домейна на вашата компания; последното е това, което бих направил.
  • В момента го направих type='email' и добавих малко JavaScript за попълване на имейл адреси, които (в противен случай) изглеждат като имейл адреси на mycompany. Но благодаря за приноса, вече имате моето +1.

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?