Шаблон preg_match, содержащий - (дефис) в php

0

Я хочу, чтобы preg_match строку, которая выглядит так (ниже), я пробовал другие методы, но они работают для определенной строки не

firstname

first-name

и, кроме этого, отклонить другую строку

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

  • 0
    Есть некоторые инструменты, такие как regex101.com, которые помогут вам создать и протестировать RegExpressions
  • 0
    Не следует использовать все регулярные выражения, если вы не знаете, как они работают, и не используете функции, которые их вызывают. Конечно, не в коде, который не может быть проверен.
Теги:
preg-match

3 ответа

1
Лучший ответ

Как насчет:

preg_match('/^\w+-?\w+$/', $string);
  • 0
    это то, что я искал тебя, спасибо :)
  • 0
    @runningmark: Пожалуйста.
1

Вы можете сопоставить 0 или 1 дефисов с помощью ? символ:

if( preg_match('/^first-?name$/', $yourString ) ){
    // matched.
}

Символы ^ и $ - это начальные и конечные маркеры, добавленные для обеспечения точности строки.

  • 1
    имя, имя было просто примером :)
  • 0
    Справедливо, но вы написали «кроме этого, отклоните другую строку». Если были другие критерии для того, что должно быть сопоставлено, то вам нужно было указать. Ответ, который вы приняли, также будет соответствовать "__" и "___" как действительные строки.
0

Перейдите на страницу https://www.regex101.com/

попробуйте (first[\-]{0,1}name)

работает отлично :-)

PHP-код:

$pattern = '(first[\-]{0,1}name)';
echo preg_match($pattern,'firstname');

echo preg_match($pattern,'first-name');

выходы: 11 - это означает, что true - true

Ещё вопросы

Сообщество Overcoder
Наверх
Меню