ฉันจะตรวจสอบความถูกต้องของสตริงโดยใช้นิพจน์ทั่วไปเพื่ออนุญาตเฉพาะอักขระที่เป็นตัวอักษรและตัวเลขในนั้นได้อย่างไร
(ฉันไม่ต้องการให้เว้นวรรคเช่นกัน)
ฉันจะตรวจสอบความถูกต้องของสตริงโดยใช้นิพจน์ทั่วไปเพื่ออนุญาตเฉพาะอักขระที่เป็นตัวอักษรและตัวเลขในนั้นได้อย่างไร
(ฉันไม่ต้องการให้เว้นวรรคเช่นกัน)
คำตอบ:
ใช้นิพจน์ต่อไปนี้:
^[a-zA-Z0-9]*$
เช่น:
using System.Text.RegularExpressions;
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(SomeString)) {
...
}
ใน. NET 4.0 คุณสามารถใช้ LINQ:
if (yourText.All(char.IsLetterOrDigit))
{
//just letters and digits.
}
yourText.All
จะหยุดดำเนินการและส่งคืนรายงานfalse
ในครั้งแรกเนื่องจากไม่สามารถปฏิบัติตามสัญญาได้char.IsLetterOrDigit
false
All
บันทึก! คำตอบนี้ไม่ได้ตรวจสอบตัวอักษรและตัวเลขอย่างเคร่งครัด (ซึ่งโดยทั่วไปคือ AZ, az และ 0-9) åäö
คำตอบนี้จะช่วยให้ตัวละครในท้องถิ่นเช่น
อัพเดท 2018-01-29
ไวยากรณ์ด้านบนใช้ได้เฉพาะเมื่อคุณใช้วิธีการเดียวที่มีอาร์กิวเมนต์เดียวของประเภทที่ถูกต้อง (ในกรณีนี้char
)
หากต้องการใช้หลายเงื่อนไขคุณต้องเขียนดังนี้:
if (yourText.All(x => char.IsLetterOrDigit(x) || char.IsWhiteSpace(x)))
{
}
char.IsLetterOrDigit('ก')
csharppad.com/gist/f96a6062f9f8f4e974f222ce313df8catrue
คุณสามารถทำได้อย่างง่ายดายด้วยฟังก์ชันส่วนขยายแทนที่จะเป็น regex ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
for (int i = 0; i < str.Length; i++)
{
if (!(char.IsLetter(str[i])) && (!(char.IsNumber(str[i]))))
return false;
}
return true;
}
ต่อคอมเม้นนะครับ :) ...
public static bool IsAlphaNum(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
return (str.ToCharArray().All(c => Char.IsLetter(c) || Char.IsNumber(c)));
}
char.IsLetterOrDigit
แทน IsLetter + IsNumber
ในขณะที่ฉันคิดว่าโซลูชันที่ใช้ regex น่าจะเป็นวิธีที่ฉันจะไป แต่ฉันก็ถูกล่อลวงให้ห่อหุ้มสิ่งนี้เป็นประเภท
public class AlphaNumericString
{
public AlphaNumericString(string s)
{
Regex r = new Regex("^[a-zA-Z0-9]*$");
if (r.IsMatch(s))
{
value = s;
}
else
{
throw new ArgumentException("Only alphanumeric characters may be used");
}
}
private string value;
static public implicit operator string(AlphaNumericString s)
{
return s.value;
}
}
ตอนนี้เมื่อคุณต้องการสตริงที่ผ่านการตรวจสอบแล้วคุณสามารถมีลายเซ็นเมธอดที่ต้องการ AlphaNumericString และรู้ว่าถ้าคุณได้รับมันก็ถูกต้อง (นอกเหนือจาก null) หากมีคนพยายามส่งผ่านในสตริงที่ไม่ผ่านการตรวจสอบจะทำให้เกิดข้อผิดพลาดของคอมไพเลอร์
คุณสามารถเล่นตัวละครและใช้ตัวดำเนินการความเท่าเทียมกันทั้งหมดหรือใช้ตัวแสดงอย่างชัดเจนไปยัง AlphaNumericString จากสตริง ol ธรรมดาก็ได้หากคุณสนใจ
static public implicit operator string
ส่วนนี้
ฉันต้องการตรวจสอบ AZ, az, 0-9; โดยไม่มีนิพจน์ทั่วไป (แม้ว่า OP จะขอ regex)
การผสมผสานคำตอบและความคิดเห็นต่างๆที่นี่และการสนทนาจากhttps://stackoverflow.com/a/9975693/292060นี้จะทดสอบตัวอักษรหรือตัวเลขหลีกเลี่ยงตัวอักษรภาษาอื่นและหลีกเลี่ยงตัวเลขอื่น ๆ เช่นอักขระเศษส่วน
if (!String.IsNullOrEmpty(testString)
&& testString.All(c => Char.IsLetterOrDigit(c) && (c < 128)))
{
// Alphanumeric.
}
^\w+$
จะอนุญาต a-zA-Z0-9_
ใช้^[a-zA-Z0-9]+$
เพื่อไม่อนุญาตขีดล่าง
โปรดทราบว่าทั้งสองอย่างนี้ต้องการให้สตริงไม่ว่างเปล่า ใช้*
แทนการ+
อนุญาตสตริงว่าง
^[\w-]+$
ในการตรวจสอบว่าสตริงเป็นทั้งตัวอักษรและตัวเลขผสมกันหรือไม่คุณสามารถเขียนคำตอบ @jgauffin ใหม่ได้ดังนี้โดยใช้. NET 4.0 และ LINQ:
if(!string.IsNullOrWhiteSpace(yourText) &&
yourText.Any(char.IsLetter) && yourText.Any(char.IsDigit))
{
// do something here
}
หากคุณต้องการA-z 0-9
ตรวจสอบASCII ที่ไม่ใช่ regex คุณไม่สามารถใช้char.IsLetterOrDigit()
เนื่องจากมีอักขระ Unicode อื่น ๆ
สิ่งที่คุณทำได้คือตรวจสอบช่วงรหัสอักขระ
ต่อไปนี้เป็นข้อมูลที่ละเอียดกว่าเล็กน้อย แต่เพื่อความสะดวกในการทำความเข้าใจมากกว่าการใช้โค้ดกอล์ฟ
public static bool IsAsciiAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
{
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] < 48) // Numeric are 48 -> 57
{
return false;
}
if (str[i] > 57 && str[i] < 65) // Capitals are 65 -> 90
{
return false;
}
if (str[i] > 90 && str[i] < 97) // Lowers are 97 -> 122
{
return false;
}
if (str[i] > 122)
{
return false;
}
}
return true;
}
จากคำตอบของ cletus คุณอาจสร้างส่วนขยายใหม่
public static class StringExtensions
{
public static bool IsAlphaNumeric(this string str)
{
if (string.IsNullOrEmpty(str))
return false;
Regex r = new Regex("^[a-zA-Z0-9]*$");
return r.IsMatch(str);
}
}
ฉันแนะนำว่าอย่าขึ้นอยู่กับโค้ดสำเร็จรูปและบิวท์อินใน. NET framework ลองนำเสนอวิธีแก้ปัญหาใหม่ .. นี่คือสิ่งที่ฉันทำ ..
public bool isAlphaNumeric(string N)
{
bool YesNumeric = false;
bool YesAlpha = false;
bool BothStatus = false;
for (int i = 0; i < N.Length; i++)
{
if (char.IsLetter(N[i]) )
YesAlpha=true;
if (char.IsNumber(N[i]))
YesNumeric = true;
}
if (YesAlpha==true && YesNumeric==true)
{
BothStatus = true;
}
else
{
BothStatus = false;
}
return BothStatus;
}
char.IsNumber()
วิธีนี้เนื่องจากเป็นโค้ดที่สร้างไว้ล่วงหน้า?