2016-01-20 4 views
-4

Как я могу построить регулярное выражение, которое позволяет буквенно-цифровые и только один пространство, как:Regex в PHP, что позволяет алфавитно-цифровой с одним пробелом только

MM56M pass 
MM 54M pass 
MMM 5 
555555 pass 
LPOLKG pass 
MM 5T YU does not pass 

Благодаря

+2

См [Обучение регулярных выражений] (http://stackoverflow.com/a/2759417/3832970). –

+0

Почему бы просто не подсчитать пробелы и проверить, если более 1? (без регулярного выражения) –

+0

Мне тоже нужно это как буквенно-цифровое –

ответ

2

бы эту работу:

^[A-Za-z0-9]+([A-Za-z0-9]+)?$ 

Он соответствует одному или нескольким буквам или цифрам в любом случае, возможно, пробелу и одному или нескольким буквам или номерам в любом случае

+0

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

+0

мой плохой, надеюсь, исправлено это @oussamakamal – RedLaser

0

Это регулярное выражение должно работать ...

/^[[:alnum:]]+([[:alnum:]]+)?$/ 

Demo: https://regex101.com/r/hQ6fM4/2 (не g модификатор используется здесь не будет использоваться в PHP, если строка многострочного используйте m так ^$ влияют друг линия).

[[:alnum:]] - это символьная скобка posix для альфа-или числового символа. + after является квантификатором, означающим один или несколько из этих символов. ^$ являются якорями ^ является началом строки, $ является окончанием. () - это группировка, а ? после этого делает эту вторую группу необязательной. / являются разделителями, указывающими, где начинается и заканчивается регулярное выражение.

или если вы хотите странный подход:

$str = 'test test'; 
$post = preg_replace('/\s/', '', $str); 
if (((strlen($str) - 1) == strlen($post) || (strlen($str) == strlen($post))) && ctype_alnum($post)) { 
echo 'tis good'; 
} else { 
echo 'rut row'; 
} 

Демо: https://eval.in/505494