Вам нужно использовать скобки, если имена свойств имеют специальные символы:
var foo = {
"Hello, world!": true,
}
foo["Hello, world!"] = false;
Кроме этого, я полагаю, это просто вопрос вкуса. IMHO, точечное обозначение короче и делает более очевидным, что это свойство, а не элемент массива (хотя, конечно, JavaScript не имеет ассоциативных массивов).
Согласно Создайте регулярное выражение для соответствия произвольному числовому диапазону и после создания такого регулярного выражения для вашего примера в Regex_For_Range :
\b0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])\b
выполнит трюк.
Процесс будет (по-прежнему после этого генератора регулярных выражений):
Сначала перейдите в равные диапазоны длин:
blockquote>110 - 999 1000 - 2234
Во-вторых, перейдите в диапазоны, которые дают простые регулярные выражения:
blockquote>110 - 199 200 - 999 1000 - 1999 2000 - 2199 2200 - 2229 2230 - 2234
Поверните каждый диапазон в регулярное выражение:
< / blockquote>1[1-9][0-9] [2-9][0-9]{2} 1[0-9]{3} 2[01][0-9]{2} 22[0-2][0-9] 223[0-4]
Свернуть смежные степени 10: 1 [1-9] [0-9] [2-9] [0-9] {2} 1 [0-9] {3 } 2 [01] [0-9] {2} 22 [0-2] [0-9] 223 [0-4]
Объединение приведенных выше выражений дает:
blockquote >0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])
Далее мы попытаемся разложить общие префиксы с помощью дерева: проанализировать дерево на основе префиксов регулярных выражений:
blockquote>. 1 [1-9] [0-9] + [0-9]{3} + [2-9] [0-9]{2} + 2 [01] [0-9]{2} + 2 [0-2] [0-9] + 3 [0-4]
Поворот дерево разбора в выражение регулярных выражений:
blockquote>0*(1([1-9][0-9]|[0-9]{3})|[2-9][0-9]{2}|2([01][0-9]{2}|2([0-2][0-9]|3[0-4])))
Мы выбираем более короткий, чем наш re sult.
blockquote>\b0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])\b
Это не те выражения, которые выделяются регулярными выражениями. Вероятно, вам будет легче убедиться, что у вас есть правильное количество цифр /^([0-9]{3,4})$/
, а затем выполните дальнейшие проверки против захвата.
Пока вы могли делать это с каким-то абсурдным выглядящим регулярным выражением (как ответил VonC), regex действительно не должен этого делать .. Почему бы не отложить проверку числа до перенаправленного на скрипт ?
Если числа 110-2234 перейти к сценарию1 и 1-109 перейти к скрипту2, было бы much проще направить все числа по сценарию router
и иметь он перенаправляется в правильное место (через перенаправления HTTP).
В .htaccess
:
RewriteRule ^view/([0-9]+)/?$ router.php?page=$1 [L]
.. затем в router.php
что-то вроде:
<?PHP
if(
int($_GET['page']) > 110 &&
int($_GET['page']) < 2234
){
header("Status: 301 Moved Permanently\nLocation: /script1");
}else{
header("Status: 404 Not Found");
}
?>
Вы можете поместить регулярные выражения для следующих диапазонов вместе:
1[1-9]\d = 110-199
[2-9]\d\d = 200-999
1\d\d\d = 1000-1999
2[0-1]\d\d= 2000-2199
22[0-2]\d = 2200-2229
223[0-4] = 2230-2234
для формирования:
(1[1-9]\d|[2-9]\d\d|1\d\d\d|2[0-1]\d\d|22[0-2]\d|223[0-4])
\ d означает [0-9], но в трех меньших символах
Возможно, все не очень красиво.
\b(?:[1][1][0-9]|1\d{3}|223[0-4]|2[0-1]\d\d|2[0-2][0-3][0-4])\b
Я отправил по электронной почте Филлипу Хейзелю, автору PCRE, в 2006 году, что он думал о математике в регулярном выражении:
Возможно это выходит за рамки проекта, на ваш взгляд: способность обрабатывать номера как числа, а не текст, это определенно будет достойной функцией. Позволяя вам выполнять некоторые основные математические проверки по совпадающим цифрам, например: это вторая совпадающая цифра выше или ниже, это третья цифра, кратная с 1-го, и многие более сложные случаи, о которых я не буду рассказывать, просто чтобы получить мою точку зрения , Считаете ли вы, что это превышает область текстового ввода?
blockquote>, на который я получил следующий ответ:
Да, я думаю, что знаю, а также это не то, что доступно в регулярных выражениях Perl. Я знаю, что у PCRE есть некоторые расширения от Perl, но ничто не столь важно (вы могли бы взломать что-то с помощью выносок, но это было бы немного ad hoc и, без сомнения, чрезвычайно беспорядочно!).
Philip
blockquote>, и я больше не мог согласиться на `09. Просто сопоставьте все числа и выполните проверку количества на любом языке, с которым вы работаете.