Я понимаю, что шаблон регулярного выражения должен соответствовать строке, которая начинается с комбинации и повторения следующих символов:
az
AZ
a white-space character
И нет никаких ограничений на то, как строка может закончиться!
Таким образом, строка, такая как uoiui897868
(любая строка, которая начинается только с пробела, az
или AZ
), соответствует шаблону... (уверена, что это так)
Но проблема заключается в строке, такой как 76868678jugghjiuh
(любая строка, которая начинается только с символа, кроме пробела, az
или AZ
) тоже соответствует! Этого не должно быть!
Я также проверил использование функции php preg_match()
, которая возвращает true (т.е. Шаблон соответствует строке). Также использовались другие онлайн-инструменты, такие как regex101
или regexr.com
. Строка соответствует шаблону. Может ли кто-нибудь помочь мне понять, почему шаблон соответствует строке, описанной во втором случае?
Ваше регулярное выражение совершенно бесполезно: оно будет тривиально соответствовать любой строке (пустой, не пустой, с числами, без,...), независимо от ее структуры.
Это потому, что
^
, вы обеспечиваете начало строки, теперь каждая строка имеет начало.[A-Za-z ]
, но вы используете оператор *
, поэтому 0
или более повторений. Таким образом, даже если строка не содержит (или начинается с) символа из [A-Za-z ]
, совпадение просто скажет: нулевые совпадения и разобрать оставшуюся строку. Вам нужно использовать +
вместо *
для принудительного применения "по крайней мере одного символа".
/^[a-zA-Z ]*/
Ваше регулярное выражение будет соответствовать строкам, которые "начинаются с" любого числа (включая ноль) букв или пробелов.
^
означает "начало строки" и *
означает "ноль или больше".
Оба uoiui897868
и 76868678jugghjiuh
начинаются с 0 или более букв/пробелов, поэтому они оба совпадают.
Вы, вероятно, хотите:
/^[a-zA-Z ]+/
" +
Означает "один или несколько", поэтому он не будет соответствовать нулевым символам.
То, что вы действительно хотите, - это сопоставить один или несколько предыдущих символов.
Для этого вы используете +
/^[a-zA-Z ]+/
Конец '*' на конце означает ноль или более совпадений символа, поэтому все строки будут совпадать. Возможно, вы хотите удалить квантор подстановочных знаков или изменить его на "+" квантификатор и добавить "$" в конец для проверки всей строки.
^
Означает «начало строки», поэтому регулярное выражение означает «начинается с» любого количества букв или пробелов. Обратите внимание, что*
означает «0 или более».*
означает «любое количество», в том числе zilch.