2015-01-28 3 views
0

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

firstname

first-name

и, кроме того, отвергает другую строку

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

+0

Есть некоторые инструменты, как https://www.regex101.com/, которые помогут вам'to сборки и тестирования RegExpressions –

+0

Вы не должны использовать регулярные выражения аль все, если вы не знаете как они работают и используют функции, которые их вызывают. Конечно, не в коде, который не может быть протестирован. – sln

ответ

1

Как насчет:

preg_match('/^\w+-?\w+$/', $string); 
+0

вот что я искал, спасибо :) – runningmark

+0

@runningmark: Добро пожаловать. – Toto

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 - это означает, что верно - верно

1

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

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

В ^ и $ символы начала и конца, добавил, чтобы гарантировать, что строка является точной.

+1

имя, первое имя было всего лишь примером :) – runningmark

+0

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

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