2014-12-13 3 views
-1

У меня есть это регулярное выражение электронной почты, и я хотел бы сделать то же самое с именем regex, чтобы вы не могли писать числа в имени, как мне его изменить?PHP preg_match только буквы и цифры нет, может быть, объяснение

if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) { 
    $emailError = 'You entered an invalid email address.'; 
    $hasError = true; 
} 

Я знаю, что [a-z0-9 _.-] означает, что a-z 0-9 и _. - можно использовать. Но я хочу использовать только a-z, и поэтому мой мозг ломается, потому что я не понимаю всего предложения, может ли кто-нибудь «перевести» его использовать только a-z, а не числа ни _ -.? Я бы хотел, чтобы это было изменено на имя regex, чтобы люди не могли писать числа на свое имя.

Я понимаю, что я могу написать

if (!preg_match("/^[[:alnum:]][a-z]*@[a-z]+\.[a-z]{2,4}$/i", trim($_POST['name']))) { 
    $nameError = 'You entered invalid characters in your name.'; 
    $hasError = true; 
} 

, но для меня это не имеет никакого смысла, как я должен указать, что в регулярном выражении выше.

, но я мог бы также набрать здесь? поэтому я говорю, если он содержит 0-9, то это недействительно? но я не знаю, что это означает всех этих персонажей в предложении.

if (preg_match("/^[[:alnum:]][0-9]*@[0-9]+\.[0-9]{2,4}$/i", trim($_POST['name']))) { 
    $nameError = 'You entered invalid characters in your name.'; 
    $hasError = true; 
} 


Я пытался исследовать о «preg_match», но я не могу найти объяснение, так что я могу сделать мой регулярное выражение для «preg_match» на мой собственный

+2

«Только буквенно-цифровые цифры и цифры»? Вы знаете, что буквенно-цифровые номера содержат цифры, верно? (Также подумайте, что у людей могут быть пробелы, апострофы, акцентированные символы, дефисы и, возможно, другие вещи, о которых я не думал в их имени ...) –

+0

этот вопрос не является дубликатом того, с которым вы связались. –

ответ

1

Вы можете попробовать ниже.

/^[a-z][email protected][a-z]+\.[a-z]{2,4}$/i 
  • [[:alnum:]] Похожее как буквы и цифры, но POSIX [[:alpha:]] соответствует только алфавиты.
  • [a-z]* нулевые или более строчные буквы. [a-z]+ один или несколько строчных букв.
  • i модификатор помогает сделать регистр, нечувствительный к регистру.
+0

Я бы избавился от '[[: alpha:]]', никто не получил акцентированную первую букву своего имени, я не вижу в этом никакой логики. – pguardiario

+0

Вы имеете в виду, мне нужно изменить '[[: alpha:]]' на '[a-zA-Z]'? –

+0

Я имел в виду изменение '[[: alpha:]] [az] *' to '[az] +' – pguardiario

0

Если вы хотите, чтобы понять шаблон регулярного выражения, попробуйте использовать http://regex101.com. Это позволит вам анализировать каждую часть шаблона.

Вы можете попробовать использовать это, он должен делать свою работу:

/^[[:alpha:]][a-z]*@[a-z]+\.[a-z]{2,4}$/i 

Но простое регулярное выражение для проверки имен, которые я использую, и не было никаких проблем с это:

/^([a-z])+$/i 

Хотя первая может быть лучше (?), Вторая делает регулярное выражение несколько более понятным, на мой взгляд.

+0

Я не думаю, что это захватывает то, что вы ожидаете от него. – pguardiario

Смежные вопросы