Регулярные выражения: low-caps, точки, нулевые пробелы

61
8

как написать выражение, которое проверяет наличие нижних кадров, точек и без пробелов в строке?


приведенный ниже код пытался проверить на наличие низких точек и точек (это все равно не работает!), но я не знаю, как добавить выражение в пробелы.


# check for matches of lowcaps or lowcaps with a dot
if (!preg_match('/([a-z0-9]|[a-z0-9\.])/', $cst_value))
{
$error = true;
echo ' please use lowcaps only with dot(s) and without any spacing.';
}

любые идеи?


Большое спасибо,
Lau

спросил(а) 2010-08-27T00:07:00+04:00 10 лет, 6 месяцев назад
1
Решение
74

Я думаю, вы этого хотите:


if ( preg_match( '/[^a-z0-9.]/' ) ) {
$error = true;
}

Имейте в виду, я удалил!. Теперь, если это соответствует, вы получите сообщение об ошибке. VolkerK отменил его, но забыл удалить!, Я думаю.


Кроме того, http://regexpal.com/ является вашим другом.

ответил(а) 2010-08-27T00:19:00+04:00 10 лет, 6 месяцев назад
87

[a-z0-9.] соответствует строчной букве или цифре или точке.
[^a-z0-9.] соответствует всем символам, которые не являются строчной буквой или цифрой или точкой.

Поэтому, если /[^a-z0-9.]/ соответствует где угодно, строка содержит нечто, отличное от lc-letter, digit или dot. Если это не соответствует вашему условию, выполните.


if ( !preg_match('/[^a-z0-9.]/', $cst_value) ) {
// only lower-case letters, digits or dots
}

или без цифр


if ( !preg_match('/[^a-z.]/', $cst_value) ) {
// only lower-case letters or dots
}

update: example:


foreach( array('abcdef', 'abc de', 'abc.de', 'aBcde') as $cst_value) {
echo $cst_value, ': ';
if ( !preg_match('/[^a-z.]/', $cst_value) ) {
echo " ok.\n";
}
else {
echo "failure\n";
}
}

печатает


abcdef:  ok.
abc de: failure
abc.de: ok.
aBcde: failure

ответил(а) 2010-08-27T00:11:00+04:00 10 лет, 6 месяцев назад
44

'/^[a-z0-9.]+$/' должно быть правильным регулярным выражением.

ответил(а) 2010-08-27T00:32:00+04:00 10 лет, 6 месяцев назад
43

 /^[a-z0-9.]+$)/

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


^ и $ указывает, что вся строка должна содержать только те символы в группе захвата (они отмечают начало и конец строки), а + говорит, что хотя бы один из этих символов должен происходят. В зависимости от ваших потребностей вы можете изменить его, например. {3,}, что означает, что строка должна содержать не менее 3 символов.


Пример:


$values=array("fooBar", "123.45", "foo bar", "foo.bar");

foreach($values as $value) {
if (!preg_match('/^[a-z0-9.]+$/', $value))
{
echo "Not valid: $value\n";
}
}


печатает:


Not valid: fooBar
Not valid: foo bar

ответил(а) 2010-08-27T00:12:00+04:00 10 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема