Bir dize yalnızca büyük ve küçük harfler, sayılar ve alt çizgiler içeriyorsa kontrol eden normal bir ifade istiyorum.
Bir dize yalnızca büyük ve küçük harfler, sayılar ve alt çizgiler içeriyorsa kontrol eden normal bir ifade istiyorum.
Yanıtlar:
Yalnızca bu karakterleri (veya boş bir dizeyi) içeren bir dizeyle eşleştirmek için şunu deneyin:
"^[a-zA-Z0-9_]*$"
Bu, .NET düzenli ifadeleri ve muhtemelen diğer birçok dil için de çalışır.
Yıkmak:
^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string
Boş dizelere izin vermek istemiyorsanız, * yerine + kullanın.
Diğerlerinin de belirttiği gibi, bazı normal ifadeler için kısayollar vardır [a-zA-Z0-9_]
. .NET regex dilinde, ECMAScript davranışını açabilir ve \w
stenografi (sağlama ^\w*$
veya ^\w+$
) olarak kullanabilirsiniz. Diğer dillerde ve varsayılan olarak .NET'te \w
biraz daha geniş olduğunu ve diğer Unicode karakterleriyle de eşleşeceğini unutmayın (bunu işaret ettiği için Jan'a teşekkürler). Bu nedenle, yalnızca bu karakterlerle gerçekten eşleşmek istiyorsanız , açık (uzun) formu kullanmak muhtemelen en iyisidir.
[\p{upper}\p{lower}\p{gc=Number}_]
birleştirmek için hiçbir karakter olmadığını varsayarak bunu doğru yapmak için tek yapmanız gereken.
Burada çok fazla ayrıntı var ve buna derinden karşıyım, bu yüzden kesin cevabım şöyle olacaktır:
/^\w+$/
\w
eşdeğerdir [A-Za-z0-9_]
, bu da hemen hemen istediğiniz şeydir. (karışıma unicode eklemedikçe)
+
Nicelik belirtecini kullanarak bir veya daha fazla karakterle eşleşirsiniz. Boş bir dizeyi de kabul etmek istiyorsanız *
bunun yerine kullanın.
\w
genellikle yalnızca ASCII ile sınırlı değildir.
[a-z]
ve varyasyonları olmamalıdır . \w
latin olmayan karakterleri de yakalar. Like šēēā
orкукареку
Her karakterin gereksinimlerinize uygun olup olmadığını kontrol etmek istiyorsunuz, bu yüzden kullanıyoruz:
[A-Za-z0-9_]
Ayrıca steno versiyonunu bile kullanabilirsiniz:
\w
Eşdeğerdir (bazı regex tatlarında, kullanmadan önce kontrol ettiğinizden emin olun). Ardından tüm dizenin eşleşmesi gerektiğini belirtmek için şunu kullanırsınız:
^
Dizenin bu karakterle başlaması gerektiğini belirtmek için
$
Dizeyi belirtmek için o karakterle bitmelidir. Sonra kullan
\w+ or \w*
"1 veya daha fazla" veya "0 veya daha fazla" belirtmek için. Hepsini bir araya getirirsek, elimizde:
^\w*$
Um ... soru: En az bir karaktere mi sahip olması gerekiyor mu? Boş bir dize olabilir mi?
^[A-Za-z0-9_]+$
En az bir büyük veya küçük harf alfasayısal veya alt çizgi yapar. Sıfır uzunluk olabilirse, sadece + yerine * yazın
^[A-Za-z0-9_]*$
Düzenle:
Aksanların dahil edilmesi gerekiyorsa (cedilla - ç gibi), yukarıdakiyle aynı olan ancak aksan karakterleri içeren kelime karakterini kullanmanız gerekir:
^\w+$
Veya
^\w*$
Daha ayrıntılı olmasına rağmen \w
, kişisel olarak tam POSIX karakter sınıfı adlarının okunabilirliğini takdir ediyorum ( http://www.zytrax.com/tech/web/regex.htm#special ), bu yüzden şunu söyleyebilirim:
^[[:alnum:]_]+$
Ancak, yukarıdaki bağlantılardaki belgeler \w
"0 - 9, A - Z ve a - z (POSIX [: alnum:]) aralığındaki herhangi bir karakterle eşleşecek" ifadesini belirtirken, bunun doğru olduğunu bulamadım . grep -P
Yine de değil . Kullanıyorsanız alt çizgiyi açıkça eklemeniz gerekir, [:alnum:]
ancak kullanıyorsanız alt çizgiyi eklemeniz gerekir \w
. Kısa ve tatlı için aşağıdakileri yenemezsin:
^\w+$
Okunabilirlikle birlikte, POSIX karakter sınıflarını ( http://www.regular-expressions.info/posixbrackets.html ) kullanmak, normal ifadenizin ASCII olmayan dizelerde çalışabileceği anlamına gelir; diğer karakter kümelerinden farklı olabilecek ve bu nedenle yakalamak isteyebileceğiniz bazı ASCII olmayan karakterleri (letters gibi harfler) hariç tutabilecek ASCII karakterlerinin temel sıralaması.
Bilgisayar Bilimlerinde, Alfasayısal bir değer genellikle ilk karakterin bir sayı değil, bir alfabe veya alt çizgi olduğu anlamına gelir. Daha sonra bir karakter olabilir 0-9
, A-Z
, a-z
ya da çizgi ( _
).
Bunu nasıl yapacağınız aşağıda açıklanmıştır:
Php altında test edilmiştir:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
ya da al bunu
^[A-Za-z_][A-Za-z\d_]*$
ve geliştirme dilinize yerleştirin.
"en az bir" şeyi yapmak için gözcüleri kullanın. Güven bana çok daha kolay.
En az bir rakam ve bir harf içeren 1-10 karakter gerektiren bir örnek:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
NOT: \ w kullanmış olabilir, ancak \ w "kelime karakteri" nin karakter kapsamını artıran ECMA / Unicode değerlendirmeleri devreye girer.
Dize için yaptığım bu çok dilli uzantıları deneyin.
IsAlphaNumeric - Dize en az 1 alfa (Unicode aralıktaki harf, charSet içinde belirtilir) ve en az 1 sayı (numSet içinde belirtilir) içermelidir. Ayrıca, dize yalnızca alfa ve sayılardan oluşmalıdır.
IsAlpha - Dize en az 1 alfa (belirtilen charSet dilinde) içermeli ve yalnızca alfa içermelidir.
IsNumeric - Dize en az 1 sayı içermelidir (belirtilen numSet dilinde) ve yalnızca sayıları içermelidir.
İstenen dil için charSet / numSet aralığı belirlenebilir. Unicode aralıkları aşağıdaki bağlantıda mevcuttur:
http://www.ssec.wisc.edu/~tomw/java/unicode.html
API:
public static bool IsAlphaNumeric(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
const string numSet = @"0-9";
//Greek
//const string charSet = @"\u0388-\u03EF";
//const string numSet = @"0-9";
//Bengali
//const string charSet = @"\u0985-\u09E3";
//const string numSet = @"\u09E6-\u09EF";
//Hindi
//const string charSet = @"\u0905-\u0963";
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
}
public static bool IsNumeric(this string stringToTest)
{
//English
const string numSet = @"0-9";
//Hindi
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
}
public static bool IsAlpha(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
}
Kullanımı:
//English
string test = "AASD121asf";
//Greek
//string test = "Ϡϛβ123";
//Bengali
//string test = "শর৩৮";
//Hindi
//string test = @"क़लम३७ख़";
bool isAlphaNum = test.IsAlphaNumeric();
Aşağıdaki normal ifade alfasayısal karakterler ve alt çizgi ile eşleşir:
^[a-zA-Z0-9_]+$
Örneğin, Perl'de:
#!/usr/bin/perl -w
my $arg1 = $ARGV[0];
# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
print "Failed.\n";
} else {
print "Success.\n";
}
Bu, çoğu durumda işe yarayacaktır.
/^[\d]*[a-z_][a-z\d_]*$/gi
Ve çoğunlukla demek istediğim,
abcd True
abcd12 True
ab12cd True
12abcd True
1234 False
^ ... $
- ile başlayan ve biten kalıbı eşleştirin[\d]*
- sıfır veya daha fazla basamağı eşleştirin[a-z_]
- bir alfabe veya alt çizgiyi eşleme[a-z\d_]*
- bir alfabe veya rakam veya alt çizgiyi eşleme/gi
- dize genelinde ve büyük / küçük harf duyarsız1234
Yazar tarafından istenen dilden kelime. Diliniz daha kısıtlayıcı.
Benim için alfa, sayısal ve alfa sayısal arasında ayrım yapmak istediğim bir sorun vardı, bu yüzden alfasayısal bir dizenin en az bir alfa ve en az bir sayısal içermesini sağlamak için kullandım:
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
Unicode alfasayısal eşleme arayanlar için aşağıdakileri yapmak isteyebilirsiniz:
^[\p{L} \p{Nd}_]+$
Http://unicode.org/reports/tr18/ ve http://www.regular-expressions.info/unicode.html adresinde daha fazla okuma
Maçlarınızda Latin ve Unicode karakterleri kullanmadığınıza inanıyorum. Örneğin, "ã" veya "ü" karakterleri almanız gerekiyorsa, "\ w" kullanımı çalışmaz.
Alternatif olarak, bu yaklaşımı kullanabilirsiniz:
^[A-ZÀ-Ýa-zà-ý0-9_]+$
Umarım yardımcı olur!
Dizenin tamamını kontrol etmek ve boş dizelere izin vermemek için,
^[A-Za-z0-9_]+$
Bu benim için çalışıyor, bunu O'Reilly'nin "Düzenli İfadelerde Uzmanlaşma" da buldu:
/^\w+$/
Açıklama:
Kendinizi doğrulayın:
const regex = /^\w+$/;
const str = `nut_cracker_12`;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}