php regex preg_match выражение для проверки строки для A-Za-z0-9, пробела и обычной пунктуации - PullRequest
0 голосов
/ 05 мая 2018

У меня проблемы с регулярным выражением. Я хочу использовать php preg_match, чтобы подтвердить, что строка содержит ТОЛЬКО прописные / строчные буквы, цифры, пробелы и знаки препинания, например ...

запятая, точка, знак плюс, тире, восклицательный знак, двоеточие, точка с запятой, скобки

Вопрос: что бы $ regex было равно в приведенном ниже примере?

<?php 
$regex = "??????";
$string = "some user input in a form passed via POST to form processor";
if (preg_match($regex, $string)) {
    echo "Found a match!";
} else {
    echo "The regex pattern does not match. :(";
}
?>

Я смотрел видео, гуглил в течение нескольких часов и до сих пор не могу понять это правильно.

Спасибо за любую помощь!

Ответы [ 4 ]

0 голосов
/ 06 мая 2018

Все ответы были полезны. Четвертый птичий ответ сработал для меня. Спасибо.

Я добавил несколько дополнительных знаков препинания и 3, которые нужно было убежать ... и (пока) закончилось этим ...

$regex = "/^[ a-z0-9,.+!:;()-_\\\[\]]+$/i";

Я публикую объяснение, чтобы помочь другим, которые могут с этим бороться. Надеюсь, это поможет кому-то, как вы, ребята, помогли мне.

Объяснение следует для всех, кому это может понадобиться (исправления приветствуются, если таковые имеются: -)

string validation: items within in [] are allowed
/   beginning regex expression delimiter
^   says start trying to match with 1st item in []
[   enclouses OK items - start
blank space character
a-z lower case letters
0-9 numbers
,   comma
.   period
+   plus sign
!   exclamation mark
:   colon
;   semicolon
(   open paren
)   close paren
-   dash
_   underscore
\\  back slash (note)
\[  open square bracket (note)
\]  close speare bracket (note)
]   encloses OK items - end
+   match indicated items 1 or more times
$   continue matching through the last item in the string
/   is the closing regex expression delimiter
i       case insensitive flag so upper and lower case letters will match

примечание: начальная обратная косая черта является escape-символом

0 голосов
/ 05 мая 2018

Попробуйте этот шаблон

$regex = "/^[A-Za-z0-9...]+$/";

Где вы должны заменить 3 точки ... между 9 и ] разрешенными специальными символами.

Пример:

// Adding comma (,) only
$regex = "/^[A-Za-z0-9,]+$/";

// Adding comma (,) and period (.)
$regex = "/^[A-Za-z0-9,.]+$/";

// comma and plus sign (+) note that plus/minus signs need to be escaped \+\-
$regex = "/^[A-Za-z0-9,\+\]+$/";

Полная строка, как вы и просили, будет:

// comma, period, plus sign, dash, exclamation mark, colon, semi colon, parentheses, space is (\s)
$regex = "/^[A-Za-z0-9,.\+\-!:;()\s]+$/";

Если символ подчеркивания (_) разрешен, вы можете использовать [\w...] вместо [A-Za-z0-9...]

Вы можете проверить это здесь

0 голосов
/ 05 мая 2018

Вы можете использовать класс символов для перечисления символов, которые вы хотите разрешить. Если вы хотите сопоставить символы верхнего и нижнего регистра, вы можете сократить A-Za-z до a-z и указать флаг без учета регистра /i.

Утверждение позиции в начале строки ^, сопоставление символа в вашем классе символов один или несколько раз + и утверждение позиции в конце строки $.

^[ a-z0-9,.+!:;()-]+$

<?php
$regex = "/^[ a-z0-9,.+!:;()-]+$/i";
$string = "some user input in a form passed via POST to form processor";
if (preg_match($regex, $string)) {
    echo "Found a match!";
} else {
    echo "The regex pattern does not match. :(";
}
?>

Тест

0 голосов
/ 05 мая 2018
...