Я думаю, вы должны избегать регулярных выражений любой ценой. Пара случаев, которые вы должны (могли):
- Вы являетесь экспертом в регулярных выражениях. Если вы вы, то, вероятно, вам следует использовать регулярное выражение, потому что он, вероятно, будет быстрее и более кратким кодом. Хотя читабельность, по моему мнению, будет отстойной.
- Вам нужно улучшить производительность.
В противном случае мой совет не использовать его!
В любом из этих случаев я бы хотел
определить, являются ли x и y числами, и
если между ними есть косая черта "/".
Я безнадежен в регулярных выражениях, пожалуйста, помогите
Как решить вашу проблему:
<?php
class Verify {
public static function numbers($str) {
$explode = explode("/", $str);
foreach($explode as $elm) {
if (!filter_var($elm, FILTER_VALIDATE_INT)) {
return false;
}
}
return true;
}
}
class StackTest extends PHPUnit_Framework_TestCase {
public function testBothPartsAreNumbers() {
$array = array(
"1/2",
"1 / 2",
"1/ 2",
"1 /2"
);
foreach($array as $elm) {
$this->assertTrue(Verify::numbers($elm));
}
}
public function testOneOfThemMightBeNotANumber() {
$array = array(
"1/a",
"a/1",
"1 / a",
"b/2",
"b/a",
"1/2.1",
);
foreach($array as $elm) {
$this->assertFalse(Verify::numbers($elm));
}
}
}
?>
alfred@alfred-laptop:~/php/stackoverflow/4916920$ php -v
PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:08:14)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.1.0, Copyright (c) 2002-2010, by Derick Rethans
# We need at least PHP5.2 for filter.
alfred@alfred-laptop:~/php/stackoverflow/4916920$ phpunit NumberTest.php
PHPUnit 3.5.10 by Sebastian Bergmann.
..
Time: 0 seconds, Memory: 3.50Mb
OK (2 tests, 10 assertions)