2013-07-10 9 views
-2

Я ищу решение регулярных выражений, которое либо проверяет, является ли только строка состоит из символов подчеркивания ___.строка содержит только символы подчеркивания

/[a-z]/ не работает, ни делает [^_]

+0

Только * спецификация *? Нет доказательств того, что вы пробовали. – devnull

+6

Ваш вопрос и примеры противоречат друг другу. –

+0

Вы попробовали регулярное выражение, которое не сработало, или никуда не с ним? Отладка всегда помогает при ответе на вопрос. (Например, '[a-Z]' неверно. Обычно это будет написано '[A-z]', но это все еще неправильно.) – Ryan

ответ

1

Чтобы проверить, если строка имеет подчеркивания вы можете просто использовать - _+

Чтобы проверить, если строка имеет буквы или цифры используют [a-zA-Z0-9]+

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

Все о размещении символов в классе регулярных выражений определено с помощью [] и дается '+' этому классу, что означает один или несколько.

Вы также можете использовать или оператор, |

/^(_+|[a-zA-Z]+|[0-9]+)$/

DEMO

+0

Это также будет соответствовать AAA ###, потому что A находится в вашем регулярном выражении. Решение этого было бы проверить, есть ли какие-либо разные символы – Martijn

+0

Чтобы * проверить * любой из них, зачем использовать '+'? – Ryan

+0

@Martijn это не будет соответствовать строке, содержащей '#'. – Robert

0

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

if(!preg_match("/[^0-9a-z\_]/si", $string) && trim($string,"_")!=""){ 
    // Code here 
} 

Вы изменили свой пост. Вы можете сделать любой из этих

if(trim($string,"_")=="")){ /* _ only */ } 
if(str_replace("_", "", $string)=="")){/* _ only */} 
if(!preg_match("/^_/si", $string)){/* _ only */} 
2

Только символы подчеркивания? Попробуйте следующее:

/^_+$/ 

Это будет строка, состоящая из одного или нескольких символов подчеркивания. Он не будет соответствовать пустой строке.

1

Чтобы проверить, если строка состоит только из символов подчеркивания:

if (strspn($str, '_') == strlen($str)) { 
    // only underscores 
} 

Смотрите также: strspn()

Теоретически, пустая строка также состоит только из символов подчеркивания; если это нежелательно, вам нужно также проверить, отличен ли strlen($str).

+1

О, это интересный способ сделать это. – Ryan

+0

Производительность этого _might_ будет плохой. Вы вызываете две функции, каждая с накладными расходами и временем выполнения. Но будьте интересны для сравнения различных методов: – Martijn

+0

@Martijn Benchmarks или этого не произошло ;-) –

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