From WikiChip
Difference between revisions of "mirc/identifiers/$isnumber"
< mirc‎ | identifiers

(Switches)
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{mirc title|$isnumber Identifier}}'''$isnumber''' Returns $true if text is a number, otherwise returns $false.
 
{{mirc title|$isnumber Identifier}}'''$isnumber''' Returns $true if text is a number, otherwise returns $false.
 +
 +
'''Note''': switches affects the range number parameters, see the examples
 +
 
== Synopsis ==
 
== Synopsis ==
 
<source lang="mIRC">
 
<source lang="mIRC">
$isnumber(text [,csend])</source>
+
$isnumber(text,[sd],[I,J])</source>
 +
 
  
Note: This documentation is based on trial-and-error, as this is not documented in /help or in versions.txt and I didn't find any mention of it in a Forum post.
 
 
== Parameters ==
 
== Parameters ==
'''text''' - The input string to be checked<br />
+
* '''text''' - The input string to be checked<br />
'''csend''' - Switches which expand the types of numbers accepted, multiple switches allowed. Default accepts only integers >= 0
+
* '''s''' - also permits +- sign to be used
== Switches ==
+
* '''d''' - also permits the decimal, allowing numbers with fractions
* n - default when no switches are used. Accepts text consisting of ONLY numbers, allows only non-negative integers
+
* '''[I,J]''' - If you pass a third and fourth parameters, they must be valid number (with respect to the switches used) and are used to validate the number in a range.
* s - also permits +- sign to be used
 
* d - also permits the decimal, allowing numbers with fractions
 
* e - also permits scientific notation only if using lowercase 'e'
 
* c - combo of using 's' and 'd' and part of the 'e' range, but also accepts a sub-set of the codepoints also recognized by $regex \d when using the /u flag
 
 
 
Note: 'e' allows the exponent to be preceded by +-, but a leading 'sign' would also require the 'c' or 's' flags too, and doesn't recognize the base10 multiplier containing a decimal unless 'd' also used. 'e' does not recognize 'd' as the exponent the way $int(1d2) returns 100. 'c' recognizes the exponent only when the combined exponent from the leading multiplier and the final exponent does not combine into an exponent larger than e308, probably for the same reason that changing the 308 to 308 in $calc(10^308) changes the result to zero. The 'c' is actually more forgiving than 'e', where 'c' accepts uppercase 'E' but the 'e' switch does not.
 
  
 
== Properties ==
 
== Properties ==
 
None
 
None
 +
 
== Example ==
 
== Example ==
 
<source lang="mIRC">//echo -a $isnumber(564)</source>
 
<source lang="mIRC">//echo -a $isnumber(564)</source>
Line 26: Line 24:
 
<source lang="mIRC">//echo -a $isnumber(abcdefG)</source>
 
<source lang="mIRC">//echo -a $isnumber(abcdefG)</source>
  
will return '''$false''' because not all the character are digit
+
will return '''$false''' because not all the characters are digits
  
<pre>//var %a 1.23e+45 | echo -a $isnumber(%a,e) vs $isnumber(%a,ed)</pre>
 
result: $false vs $true (because presence of the decimal requires 'd' or 'c' switch)
 
  
 
<pre>//var %a -123 | echo -a $isnumber(%a) vs $isnumber(%a,s)</pre>
 
<pre>//var %a -123 | echo -a $isnumber(%a) vs $isnumber(%a,s)</pre>
result: $false vs $true (using a sign requires 's' or 'c')
+
result: $false vs $true (using a sign requires 's')
 
 
Note: Most users would probably want to use some/all of the 'sdn' switches if there's a risk the string can contain of unwanted false matches with some hex strings triggering a match as if they're using scientific notation, and also because it has a partial subset of unexpected utf8 codepoints matching as if numeric. The next 2 examples shows that the 'c' switch matches 170 UTF8 codepoints, while using \d with $regex's /u switch matches 370.
 
 
 
<pre>
 
//var %i 1 , %a | while (%i isnum 1-65535) { if ((%i !isnum 55296-57343) && ($isnumber($chr(%i),c))) var %a %a %i | inc %i } | echo -ag %a : $numtok(%a,32) tokens
 
  
//var %i 1 , %a | while (%i isnum 1-65535) { if ((%i !isnum 55296-57343) && ($regex($chr(%i),/^\d$/u))) var %a %a %i | inc %i } | echo -ag %a : $numtok(%a,32) tokens</pre>
+
<pre>//echo -a $isnumber(3,d,2.1,4) vs $isnumber(3,,2.1,4)</pre>
 +
result: $false vs error, the d switches is required not only to allow decimal in the input, but in each range parameter as well
  
<pre>//var -s %a $lower($crc(LFAX,0)) | echo -a %a is $isnumber(%a,c)</pre>
 
result: 08436e69 is $true
 
Recognizes this hex string as numeric because the number following the lowercase 'e' is not large enough to prevent $calc(8436*10^69) to be larger than approx 2^1023.99.
 
 
== Compatibility ==
 
== Compatibility ==
 
{{mIRC compatibility|7.58}}
 
{{mIRC compatibility|7.58}}
 
== See also ==
 
== See also ==
 
* {{mIRC|$calc}}
 
* {{mIRC|$calc}}
 +
* {{mIRC|$isnum}}

Latest revision as of 23:58, 16 August 2022

$isnumber Returns $true if text is a number, otherwise returns $false.

Note: switches affects the range number parameters, see the examples

Synopsis[edit]

$isnumber(text,[sd],[I,J])


Parameters[edit]

  • text - The input string to be checked
  • s - also permits +- sign to be used
  • d - also permits the decimal, allowing numbers with fractions
  • [I,J] - If you pass a third and fourth parameters, they must be valid number (with respect to the switches used) and are used to validate the number in a range.

Properties[edit]

None

Example[edit]

//echo -a $isnumber(564)

will return $true

//echo -a $isnumber(abcdefG)

will return $false because not all the characters are digits


//var %a -123 | echo -a $isnumber(%a) vs $isnumber(%a,s)

result: $false vs $true (using a sign requires 's')

//echo -a $isnumber(3,d,2.1,4) vs $isnumber(3,,2.1,4)

result: $false vs error, the d switches is required not only to allow decimal in the input, but in each range parameter as well

Compatibility[edit]

Added: mIRC v7.58
Added on: 17 Nov 2019
Note: Unless otherwise stated, this was the date of original functionality.
Further enhancements may have been made in later versions.

See also[edit]