Jump to content
  • 0

Регэкспы в поле стоимости


alex_anderr
 Share

Question

Подскажите, кто частенько пользует регэкспы.

if (preg_match("/\d/", $trim) != "0"){
echo "Число без точек. sooogood.";
} elseif (preg_match("/\d[.,]/", $trim) != "0") {
echo "Число с точкой или запятой";
} else {
echo "Вообще не число.";
}

Первое правило срабатывает, но если в переменной точка или запятая, то все равно срабатывает первое правило.

Нужно чтобы правило 1. Цифра ли? 2. Цифра с точкой ИЛИ запятой?

Спасибо.

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0
RegExp:<input id="reg" style="background:#ff0;width:80%;height:30px;font:24px Arial;color:#00f;padding:1px 5px;margin:6px 0;" />
  g-<input id="g" type="checkbox"/>   i-<input id="i" type="checkbox"/>
<br>String:<br><textarea id="str" style="background:#ff0;width:300px;height:150px;padding:5px;font:14px Arial;color:#00f;float:left;">
abcdefgh\n
abcccdefgggaaa\n
wodka Absolut
</textarea>
Resultat:   alert-<input id="al" type="checkbox"/>
<textarea id="res" style="background:#ff0;width:600px;height:400px;padding:5px;margin:10px;font:14px Arial;color:#00f;float:right;"></textarea>
<div style="width:300px;float:left;">
<br>  <input id="f1" type="radio" name="rad">-string.<b>search</b>(RegExp)
<br>  <input id="f2" type="radio" name="rad">-RegExp.<b>exec</b>(string)
<br>  <input id="f3" type="radio" name="rad">-string.<b>match</b>(RegExp)
<br>  <input id="f4" type="radio" name="rad">-string.<b>replace</b>(RegExp,<input size=10 id="f4a">)
<p><button style="position:relative;left:100px;" onclick="myreg();">RegExp GO!</button>
</div>
<p style="clear:right;">
<script>
function myreg(){
var a=document.getElementById('reg');
var al=document.getElementById('al');
var b=document.getElementById('g');
var c=document.getElementById('i');
var d=document.getElementById('str');
var e=document.getElementById('res');
var f1=document.getElementById('f1');
var f2=document.getElementById('f2');
var f3=document.getElementById('f3');
var f4=document.getElementById('f4');
var f4a=document.getElementById('f4a');
a.style.background="#faa";
var g="";
if(b.checked){g="g";}
if(c.checked){g+="i";}
var reg=new RegExp(a.value,g);//alert('reg='+reg);
a.style.background="#ff0";
reg.global=b.checked?true:false;
reg.ignoreCase=c.checked?true:false;
if(f2.checked){e.value="EXEC() array="+reg.exec(d.value);if(al.checked){alert(reg.exec(d.value));}}
else if(f3.checked){e.value="MATCH() array=\n"+d.value.match(reg).join('\n\n');if(al.checked){alert(d.value.match(reg).join('\n\n'));}}
else if(f4.checked){e.value="REPLACE() string=\n"+d.value.replace(reg,f4a.value);if(al.checked){alert(d.value.replace(reg,f4a.value));}}
else{e.value="SEARCH() Index="+d.value.search(reg);if(al.checked){alert(d.value.search(reg));}}
}
</script>
<table border=1px cellpadding=4px>
<tr>
<td class="header">Символ</td>
<td class="header">Значение</td>
</tr>
<tr>
<td><code>\</code></td>
<td>Для обычных символов - делает их специальными. Например, выражение <code>/s/</code> ищет просто символ 's'. А если поставить \ перед s, то <code>/\s/</code> уже обозначает пробельный символ.И наоборот, если символ специальный, например *, то \ сделает его просто обычным символом "звездочка". Например, <code>/a*/</code> ищет 0 или больше подряд идущих символов 'a'. Чтобы найти а со звездочкой 'a*' - поставим \ перед спец. символом: <code>/a\*/</code>.</td>
</tr>
<tr>
<td><code>^</code></td>
<td>Обозначает начало входных данных. Если установлен флаг многострочного поиска <code>("m")</code>, то также сработает при начале новой строки.Например, <code>/^A/</code> не найдет 'A' в "an A", но найдет первое 'A' в "An A."</td>
</tr>
<tr>
<td><code>$</code></td>
<td>Обозначает конец входных данных. Если установлен флаг многострочного поиска, то также сработает в конце строки.Например, <code>/t$/</code> не найдет 't' в "eater", но найдет - в "eat".</td>
</tr>
<tr>
<td><code>*</code></td>
<td>Обозначает повторение 0 или более раз. Например, <code>/bo*/</code> найдет 'boooo' в "A ghost booooed" и 'b' в "A bird warbled", но ничего не найдет в "A goat grunted".</td>
</tr>
<tr>
<td><code>+</code></td>
<td>Обозначает повторение 1 или более раз. Эквивалентно <code>{1,}</code>. Например, <code>/a+/</code> найдет 'a' в "candy" и все 'a' в "caaaaaaandy".</td>
</tr>
<tr>
<td><code>?</code></td>
<td>Обозначает, что элемент может как присутствовать, так и отсутствовать. Например, <code>/e?le?/</code> найдет 'el' в "angel" и 'le' в "angle."Если используется сразу после одного из <code>квантификаторов *</code>, <code>+</code>, <code>?</code>, или <code>{}</code>, то задает "нежадный" поиск (повторение минимально возможное количество раз, до ближайшего следующего элемента паттерна), в противоположность "жадному" режиму по умолчанию, при котором количество повторений максимально, даже если следующий элемент паттерна тоже подходит.Кроме того, ? используется в предпросмотре, который описан в таблице под <code>(?=)</code>, <code>(?!)</code>, и <code>(?: )</code>.</td>
</tr>
<tr>
<td><code>.</code></td>
<td>(Десятичная точка) обозначает любой символ, кроме перевода строки: \n \r \u2028 or \u2029. (<code>можно использовать [\s\S] для поиска любого символа, включая переводы строк). Например, </code><code>/.n/</code> найдет 'an' и 'on' в "nay, an apple is on the tree", но не 'nay'.</td>
</tr>
<tr>
<td><code>(<code>x</code>)</code></td>
<td>Находит <code><code>x</code></code> и запоминает. Это называется "запоминающие скобки". Например, <code>/(foo)/</code> найдет и запомнит 'foo' в "foo bar." Найденная подстрока хранится в массиве-результате поиска или в предопределенных свойствах объекта RegExp:<code></code><code></code> <code>$1, ..., $9</code>.Кроме того, скобки объединяют то, что в них находится, в единый элемент паттерна. Например, (abc)* - повторение abc 0 и более раз.</td>
</tr>
<tr>
<td><code>(?:<code>x</code>)</code></td>
<td>Находит <code><code>x</code></code>, но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp.Как и все скобки, объединяют находящееся в них в единый подпаттерн.</td>
</tr>
<tr>
<td><code><code>x</code>(?=<code>y</code>)</code></td>
<td>Находит <code><code>x</code></code>, только если за <code><code>x</code></code> следует <code><code>y</code></code>. Например, <code>/Jack(?=Sprat)/</code> найдет 'Jack', только если за ним следует 'Sprat'. <code>/Jack(?=Sprat|Frost)/</code> найдет 'Jack', только если за ним следует 'Sprat' или 'Frost'. Однако, ни 'Sprat' ни 'Frost' не войдут в результат поиска.</td>
</tr>
<tr>
<td><code><code>x</code>(?!<code>y</code>)</code></td>
<td>Находит <code><code>x</code></code>, только если за <code><code>x</code></code> не следует <code><code>y</code></code>. Например, <code>/\d+(?!\.)/</code> найдет число, только если за ним не следует десятичная точка. <code>/\d+(?!\.)/.exec("3.141")</code> найдет 141, но не 3.141.</td>
</tr>
<tr>
<td><code><code>x</code>|<code>y</code></code></td>
<td>Находит <code><code>x</code></code> или <code><code>y</code></code>. Например, <code>/green|red/</code> найдет 'green' в "green apple" и 'red' в "red apple."</td>
</tr>
<tr>
<td><code>{<code>n</code>}</code></td>
<td>Где n - положительное целое число. Находит ровно n повторений предшествующего элемента. Например, <code>/a{2}/</code> не найдет 'a' в "candy," но найдет оба a в "caandy," и первые два a в "caaandy."</td>
</tr>
<tr>
<td><code>{<code>n</code>,}</code></td>
<td>Где n - положительное целое число. Находит n и более повторений элемента. Например, <code>/a{2,}</code> не найдет 'a' в "candy", но найдет все 'a' в "caandy" и в "caaaaaaandy."</td>
</tr>
<tr>
<td><code>{<code>n</code>,<code>m</code>}</code></td>
<td>Где n и m - положительные целые числа. Находят от n до m повторений элемента.</td>
</tr>
<tr>
<td><code>[<code>xyz</code>]</code></td>
<td>Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире. Например, <code>[abcd]</code> - то же самое, что <code>[a-d]</code>. Найдет 'b' в "brisket", а также 'a' и 'c' в "ache".</td>
</tr>
<tr>
<td><code>[^<code>xyz</code>]</code></td>
<td>Любой символ, кроме указанных в наборе. Вы также можете указать промежуток. Например, <code>[^abc]</code> - то же самое, что <code>[^a-c]</code>. Найдет 'r' в "brisket" и 'h' в "chop."</td>
</tr>
<tr>
<td><code>[\b]</code></td>
<td>Находит символ backspace. (Не путать с <code>\b</code>.)</td>
</tr>
<tr>
<td><code>\b</code></td>
<td>Находит границу слов (латинских), например пробел. (Не путать с <code>[\b]</code>). Например, <code>/\bn\w/</code> найдет 'no' в "noonday"; <code>/\wy\b/</code> найдет 'ly' в "possibly yesterday."</td>
</tr>
<tr>
<td><code>\B</code></td>
<td>Обозначает не границу слов. Например, <code>/\w\Bn/</code> найдет 'on' в "noonday", а <code>/y\B\w/</code> найдет 'ye' в "possibly yesterday."</td>
</tr>
<tr>
<td><code>\c<code>X</code></code></td>
<td><code><code>Где </code></code><code><code>X</code></code> - буква от A до Z. Обозначает контрольный символ в строке. Например, <code>/\cM/</code> обозначает символ Ctrl-M.</td>
</tr>
<tr>
<td><code>\d</code></td>
<td>находит цифру из любого алфавита (у нас же юникод). Испльзуйте <code>[0-9], чтобы найти только обычные цифры. Например, </code><code>/\d/</code> или <code>/[0-9]/</code> найдет '2' в "B2 is the suite number."</td>
</tr>
<tr>
<td><code>\D</code></td>
<td>Найдет нецифровой символ (все алфавиты). <code>[^0-9]</code> - эквивалент для обычных цифр. Например, <code>/\D/</code> или <code>/[^0-9]/</code> найдет 'B' в "B2 is the suite number."</td>
</tr>
<tr>
<td><code>\f,\r,\n</code></td>
<td>Соответствующие спецсимволы form-feed, line-feed, перевод строки.</td>
</tr>
<tr>
<td><code>\s</code></td>
<td>Найдет любой пробельный символ, включая пробел, табуляцию, переводы строки и другие юникодные пробельные символы. Например, <code>/\s\w*/</code> найдет ' bar' в "foo bar."</td>
</tr>
<tr>
<td><code>\S</code></td>
<td>Найдет любой символ, кроме пробельного. Например, <code>/\S\w*/</code> найдет 'foo' в "foo bar."</td>
</tr>
<tr>
<td><code>\t</code></td>
<td>Символ табуляции.</td>
</tr>
<tr>
<td><code>\v</code></td>
<td>Символ вертикальной табуляции.</td>
</tr>
<tr>
<td><code>\w</code></td>
<td>Найдет любой словесный (латинский алфавит) символ, включая буквы, цифры и знак подчеркивания. Эквивалентно <code>[A-Za-z0-9_]</code>. Например, <code>/\w/</code> найдет 'a' в "apple," '5' в "$5.28," и '3' в "3D."</td>
</tr>
<tr>
<td><code>\W</code></td>
<td>Найдет любой не-(лат.)словесный символ. Эквивалентно <code>[^A-Za-z0-9_]</code>. Например, <code>/\W/</code> и <code>/[^$A-Za-z0-9_]/</code> одинаково найдут '%' в "50%."</td>
</tr>
<tr>
<td><code>\<code>n</code></code></td>
<td>где <code><code>n</code></code> - целое число. Обратная ссылка на n-ю запомненную скобками подстроку. Например, <code>/apple(,)\sorange\1/</code> найдет 'apple, orange,' в "apple, orange, cherry, peach.". За таблицей есть более полный пример.</td>
</tr>
<tr>
<td><code>\0</code></td>
<td>Найдет символ NUL. Не добавляйте в конец другие цифры.</td>
</tr>
<tr>
<td><code>\x<code>hh</code></code></td>
<td>Найдет символ с кодом <code><code>hh</code></code> (2 шестнадцатиричных цифры)</td>
</tr>
<tr>
<td><code>\u<code>hhhh</code></code></td>
<td>Найдет символ с кодом <code><code>hhhh</code></code> (4 шестнадцатиричных цифры).</td>
</tr>
</table>

тренируйтесь на здоровье :dash:

Edited by K313
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy