检查一行代码中字符串是否为数字

时间:2016-08-08 13:54:00

标签: c# string int dotnetnuke tryparse

我正在使用DNN表单构建模块,该模块允许根据条件运行某些服务器端代码。对于我的特定场景,如果某个表单文本的前4个字符是数字的话,我需要运行我的代码块。

但是,键入条件的空间只有一行,我相信会在幕后某处注入if语句,所以我不具备编写多行条件的能力

如果我有一个名为MyField的表单字段,我可能会创建一个简单的条件:

[MyField] == "some value"

然后在幕后某处将其翻译成if("some value" == "some value") {

我知道int.TryParse()可用于确定字符串是否为数字,但我所见过的每个实现都需要两行代码,第一行声明变量以包含转换后的整数和第二个运行实际功能。

有没有办法检查字符串的前4个字符是否只是if语句中可以存在的一行中的数字?

3 个答案:

答案 0 :(得分:6)

将其包裹在extension method

public static class StringExtensions
{
    public static bool IsNumeric(this string input)
    {
        int number;
        return int.TryParse(input, out number);
    }
}

并像

一样使用它
if("1234".IsNumeric())
{
    // Do stuff..
}

自问题更改后更新:

public static class StringExtensions
{
    public static bool FirstFourAreNumeric(this string input)
    {
        int number;
        if(string.IsNullOrEmpty(input) || input.Length < 4)
        {
            throw new Exception("Not 4 chars long");
        }

        return int.TryParse(input.Substring(4), out number);
    }
}

并像

一样使用它
if("1234abc".FirstFourAreNumeric())
{
    // Do stuff..
}

答案 1 :(得分:3)

对此作出回应:

  

有没有办法检查字符串的前4个字符是否只能在if语句中存在的一行中是数字?

     

你们不必让它解释比正整数更复杂的事情。

        body {
            padding: 5px;
        }

        label {
            font-weight: bold;
        }

        input[type=button] {
            padding: 10px 16px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
        }

        p {
            margin: 1em 0 0;
        }

        td.pz {
            border: thin solid #000000;
            width: 59px;
            height: 57px;
            background-color: #FFFFFF;
        }

        .red_block {
            border: thin solid #000000;
            width: 59px;
            height: 57px;
            background-color: #FF0000;
        }

        .yellow_block {
            border: thin solid #000000;
            width: 59px;
            height: 57px;
            background-color: #FFFF00;
        }

        td.padding {
            width: 59px;
            height: 57px;
        }

旧回答:

如果你不能使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <br> <br> <input id="btnWhite" type='button' style="font-face: 'Arial'; width: 50px; font-size: larger; color: Black; background-color: #FFFFFF; border: 1px dotted #999" value=""> <input id="btnYellow" type='button' style="font-face: 'Arial'; width: 50px; font-size: larger; color: Black; background-color: #FFFF00; border: 1px dotted #999" value=""> <input id="btnRed" type='button' style="font-face: 'Arial'; width: 50px; font-size: larger; color: Black; background-color: #FF0000; border: 1px dotted #999" value=""> <input id="btnBlue" type='button' style="font-face: 'Arial'; width: 50px; font-size: larger; color: Black; background-color: #0070C0; border: 1px dotted #999" value=""> <input id="btnGreen" type='button' style="font-face: 'Arial'; width: 50px; font-size: larger; color: Black; background-color: #00FF00; border: 1px dotted #999" value=""> <br> <br> <table> <tr> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="red_block"></td> <td class="red_block"></td> <td class="red_block"></td> </tr> <tr> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="red_block"></td> <td class="red_block"></td> <td class="red_block"></td> </tr> <tr> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="red_block"></td> <td class="red_block"></td> <td class="red_block"></td> </tr> <tr> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="red_block"></td> <td class="red_block"></td> <td class="red_block"></td> </tr> <tr> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="yellow_block"></td> <td class="red_block"></td> <td class="red_block"></td> <td class="red_block"></td> </tr> </table> </body>,你可能会使用LINQ:

new Regex(@"^\d{4}").IsMatch("3466") // true
new Regex(@"^\d{4}").IsMatch("6")    // false
new Regex(@"^\d{4}").IsMatch("68ab") // false
new Regex(@"^\d{4}").IsMatch("1111abcdefg") // true

// in an if:
if (new Regex(@"^\d{4}").IsMatch("3466"))
{
    // Do something
}

如果可以,请使用以下TryParse扩展方法:

"12345".All(char.IsDigit); // true
"abcde".All(char.IsDigit); // false
"abc123".All(char.IsDigit); // false

答案 2 :(得分:2)

一些简单的LinQ怎么样?

if (str.Take(4).All(char.IsDigit) { ... }